识别并计算多列中的重复值

时间:2014-08-05 02:21:27

标签: r formatting

我有一个包含多个列的数据集,看起来与此类似:

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中执行此操作的任何想法? 谢谢!

2 个答案:

答案 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

很容易用[索引进行子集化。只需子集tabtab大于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