我有一个包含多个列的数据集,看起来与此类似:
ID1 ID2 ID3 ID4
Blue Grey Fuchsia Green
Black Blue Orange Blue
Green Green Yellow Pink
Pink Yellow NA Orange
我想要做的是计算每个值在四列中重复的次数。例如,这是我想从上面回过头来的:
ID Replicates
Blue 3
Black 1
Green 3
Pink 2
Grey 1
Yellow 2
Fuchsia 1
Orange 2
我还希望能够在频率> 2时询问数据集中存在哪个ID值。所以预期的结果将是:绿色和蓝色。
有关如何在R中执行此操作的任何想法? 谢谢!
答案 0 :(得分:5)
只需要常规的table
即可满足各种因素的数据集。
> ( tab <- table(unlist(data)) )
Black Blue Green Pink Grey Yellow Fuchsia Orange
1 3 3 2 1 2 1 2
如果要命名表,请添加deparse.level = 2
。
很容易用[
索引进行子集化。只需子集tab
,tab
大于2.您可以使用names
获取颜色。
> tab[tab > 2]
Blue Green
3 3
> names(tab[tab > 2])
[1] "Blue" "Green"
还有as.data.frame
方法。
> as.data.frame(tab)
Var1 Freq
1 Black 1
2 Blue 3
3 Green 3
4 Pink 2
5 Grey 1
6 Yellow 2
7 Fuchsia 1
8 Orange 2
答案 1 :(得分:2)
dplyr
/ tidyr
解决方案
ID1<-c("Blue", "Black", "Green", "Pink")
ID2<-c("Grey", "Blue", "Green", "Yellow")
ID3<-c("Fuchsia", "Orange", "Yellow", NA)
ID4<-c("Green", "Blue", "Pink", "Orange")
mydf<-data.frame(ID1,ID2,ID3,ID4)
library(dplyr)
library(tidyr)
mydf %>%
gather(key,value,1:4) %>%
group_by (value) %>%
tally
value n
1 Black 1
2 Blue 3
3 Fuchsia 1
4 Green 3
5 Grey 1
6 Orange 2
7 Pink 2
8 Yellow 2
9 NA 1
返回频率高于2的那些......
mydf %>%
gather(key,value,1:4) %>%
group_by (value) %>%
tally %>%
filter (n>2)
value n
1 Blue 3
2 Green 3