【问题标题】:R update if statement to add countR更新if语句以添加计数
【发布时间】:2016-09-23 06:42:25
【问题描述】:

我正在尝试计算列如何包含每行的文本。我有以下信息告诉我所有列是否都包含文本:

df = structure(list(Participant = 1:3, A = c("char", "foo", ""), B = c("char2", 0L, 0L)), .Names = c("Participant", "A", "B"), row.names = c(NA,                                                                                                                        -3L), class = "data.frame")

 df$newcolumn <- ifelse(nchar(df$A)>1 & nchar(df$B)>1, "yes", "no")

我想要计算发生了多少匹配,而不是“是”或“否”。想法?

【问题讨论】:

  • 您能否更新预期的输出,因为我怀疑您的意思是 nchar 的计数还是别的什么。
  • 另外,请澄清“文本”的含义。数据框列中的所有元素将属于同一类。因此,您将始终在数据框的每一行中拥有相同数量的“字符”元素。
  • B = c("char2", 0L, 0L) 没有任何意义,0L 将被转换为字符 "0"

标签: r if-statement count counter


【解决方案1】:

使用您的逻辑,您可以尝试以下操作:

df$newcolumn <- (nchar(df$A)>1) + (nchar(df$B)>1)

df
  Participant    A     B newcolumn
1           1 char char2         2
2           2  foo     0         1
3           3          0         0

【讨论】:

    【解决方案2】:

    如果我们需要获取每行的nchar,遍历感兴趣的列,获取nchar,然后使用Reduce+ 来获取每行的总和

    df$CountNChar <- Reduce(`+`, lapply(df[-1], nchar))
    

    或者如果我们需要逻辑条件的sum,只需将nchar更改为nchar(x) &gt; 1(使用匿名函数调用)

    df$CountNChar <- Reduce(`+`, lapply(df[-1], function(x) nchar(x) >1))
    df$CountNChar
    #[1] 2 1 0
    

    【讨论】:

      【解决方案3】:

      您似乎正在尝试计算df$Adf$B 中包含多个字符的行数。最简单的方法是使用sum,因为logical 向量可以像numericinteger 一样相加。因此,您想要的代码片段是

      sum(nchar(df$A)&gt;1 &amp; nchar(df$B)&gt;1)

      但是,查看您的第一句话,您应该知道数据框的一列中只能存在一种类型的数据。 c("foo",0L,0L) 是“字符”类的向量,元素为"foo","0","0"

      【讨论】:

        猜你喜欢
        • 2019-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多