R - 重复元组的次数汇总

时间:2015-03-11 19:55:53

标签: r

嗨,并为标题道歉,我不知道如何解释我的问题。 我有一张这样的桌子:

  color.1 color.2 color.3 color.4
1     red    blue     red     red
2    blue                    blue
3   green            blue   green
4    blue                    blue

我有兴趣了解每个元组重复的次数。例如,在这种情况下,它将是:

red blue red red = 1
blue         blue = 2
green    blue green = 1

我尝试使用expand函数和summary并且它没有用。

编辑:我刚刚发现函数table做了类似于我想要的事情但不是我想要的表格格式...是否可以使用内置函数来完成它?或任何包裹?

2 个答案:

答案 0 :(得分:1)

这不是您要求的确切格式,但只需运行table(df)即可获得所需的数据。这是我的虚拟例子:

>xx=data.frame(A=c("a",NA,'a','c'),B=c('b','d','a',NA))

> table(xx) B A a b d a 1 1 0 c 0 0 0

答案 1 :(得分:1)

您可以先折叠行,然后应用table

> table(apply(d,1,paste,collapse=' '))

     blue - - blue green - blue green   red blue red red 
                 2                  1                  1 

其中d是您的样本数据集,

d <- structure(list(color.1 = structure(c(3L, 1L, 2L, 1L), .Label = c("blue", 
"green", "red"), class = "factor"), color.2 = structure(c(2L, 
1L, 1L, 1L), .Label = c("-", "blue"), class = "factor"), color.3 = structure(c(3L, 
1L, 2L, 1L), .Label = c("-", "blue", "red"), class = "factor"), 
    color.4 = structure(c(3L, 1L, 2L, 1L), .Label = c("blue", 
    "green", "red"), class = "factor")), .Names = c("color.1", 
"color.2", "color.3", "color.4"), class = "data.frame", row.names = c(NA, 
-4L))

PS:David Arenburg在下面的评论中提出了同样的想法,这是一个更加优雅和有效的实现:

table(do.call(paste, d))