我有一个数据框,其中有多个列用于单词,一列用于其所属句子的大小:
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
此代码有什么问题?该如何改善?