我正在尝试计算列每行包含文本的方式。我有以下内容告诉我所有列是否包含文本:
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")
而不是“是”或“否”我想要计算出多少匹配。想法?
答案 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$A
和df$B
中包含多个字符的行数。最简单的方法是使用sum
,因为logical
向量可以像numeric
或integer
一样添加。因此,您想要的代码片段是
sum(nchar(df$A)>1 & nchar(df$B)>1)
但是,查看第一句话时,您应该知道数据框的列中只能存在一种类型的数据。 c("foo",0L,0L)
是“字符”类的向量,其元素为"foo","0","0"
。