根据另一列中的条件跨多个列执行函数

时间:2019-12-18 14:24:27

标签: r

我有一个数据框,其中有多个列用于单词,一列用于其所属句子的大小:

set.seed(1)
 df <- data.frame(
  w1 = sample(LETTERS[1:2], 10, replace = T),
  w2 = sample(LETTERS[1:3], 10, replace = T),
  w3 = sample(LETTERS[1:4], 10, replace = T),
  w4 = sample(LETTERS[1:5], 10, replace = T),
  w5 = sample(LETTERS[1:6], 10, replace = T),
  size = sample(1:3, 10, replace = T)
)
df
   w1 w2 w3 w4 w5 size
1   A  A  D  C  E    2
2   A  A  A  C  D    3
3   B  C  C  C  E    2
4   B  B  A  A  D    1
5   A  C  B  E  D    1
6   B  B  B  D  E    1
7   B  C  A  D  A    1
8   B  C  B  A  C    2
9   B  B  D  D  E    2
10  A  C  B  C  E    2

我需要做的是获取列中唯一词的总数。对于整个数据框来说,这很容易做到:

apply(df[,1:5], 2, function(x) length(unique(x)))
w1 w2 w3 w4 w5 
 2  3  4  4  4 

但是我真正想要的是每列和每句大小 的唯一单词的总数。所以我尝试了tapply

tapply(df[,1:5], df$size, function(x) length(unique(x)))

无济于事-出现此错误:

Error in tapply(df[, 1:5], df$size, function(x) length(unique(x))) : 
  arguments must have same length

此代码有什么问题?该如何改善?

0 个答案:

没有答案