R更新if语句添加计数

时间:2016-09-23 06:42:26

标签: r if-statement count counter

我正在尝试计算列每行包含文本的方式。我有以下内容告诉我所有列是否包含文本:

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")

而不是“是”或“否”我想要计算出多少匹配。想法?

3 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分: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 :(得分:1)

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

sum(nchar(df$A)>1 & nchar(df$B)>1)

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