假设我有一个R
包含两列的数据框:value
和my_letters
:
> my_foo
value my_letters
1 5 d f h b
2 3 j f i a b g
3 1 d g j f i
4 1 h i b e
5 4 c d a
6 6 i d j e
7 7 b h f i
8 5 h d g
9 10 h e i f a
10 3 h g d i
的每个元素my_letters
是 3-6个不重复的字母,以空格分隔。
我可以计算每个字母出现的频率:
> table( unlist( strsplit( as.character(my_foo$my_letters), " " ) ) )
a b c d e f g h i j
3 4 1 6 3 5 4 6 7 3
但是如果我想要一个加权和value
怎么办?
所以,a
出现了三次:在第 2 行的值为 3,第 5 行的值为 4,第 9 行的值为 10。所以a
我想看到 3 + 4 + 10 = 17。(注意value
可能会重复)
有没有很好的plyr
//方法来做到这一点dplyr
?tidyr
(甚至apply
......)
谢谢!!
生成此数据框的代码(我确信有一种更简洁的方法):
library( plyr )
set.seed(1)
foo <- replicate( 10, letters[ sample( 10, sample(3:6, 1), replace = F ) ] )
foo2 <- laply( foo, function(d) paste(d, collapse = " ") )
my_foo <- data.frame( value=sample(10, replace=T), my_letters = foo2 )
my_foo
# count how often each letter appears
table( unlist( strsplit( as.character(my_foo$my_letters), " " ) ) )