计算数据框和汇总值中值的唯一组合

时间:2011-01-14 23:47:39

标签: r count unique summarization

我想在我的数据框中使用var1var2的独特组合:

foo <- data.frame(var1 = c(1,1,2,2,2,2,3,3,3,3,3,4,4,4,4),
                  var2 = c(1,1,1,1,2,2,1,1,2,2,2,2,2,3,3))

正如已经指出的那样,unique(foo)会产生这样的结果:

      var1  var2
 1    1     1
 2    2     1
 3    2     2
 4    3     1
 5    3     2
 6    4     2
 7    4     3

根据独特的组合,我如何获得:

  • nvar1值和
  • 的出现次数
  • svar,每个var1var2值的总和。

输出可能如下所示:

      var1  n    svar
1     1     1    1
2     2     2    3
3     3     2    3
4     4     2    5

3 个答案:

答案 0 :(得分:4)

unique(foo)应该会告诉你这里的情况。

更新2014:使用dplyr代替plyr

我建议查看库plyr以获取其他聚合类型任务,或tapply()aggregate()等等的基本R等价物。

虽然本练习多余,但以下是使用plyr的方法:

library(plyr)
ddply(foo, .(var1), unique)

请注意,您可以使用任意数量的函数替换unique,例如查找var2的均值和sd,如下所示:

ddply(foo, .(var1), summarise, mean = mean(var2), sd = sd(var2))

回复编辑

现在,您可以更合理地使用plyr()。从我们从上面学到的东西:

x <- unique(foo)

与plyr合并:

ddply(x, .(var1), summarise, n = length(var2), sum = sum(var2))

应该给你你想要的东西。

答案 1 :(得分:2)

我希望我能理解你的问题,试试:

unique(foo)

问题编辑后:

不要写与@Chase相同,一个非常简单但不太优雅的解决方案可能是:

foo$var12 <- paste(foo$var1, foo$var2, sep='|')      # the two variables combined to one
table(foo$var12)                                     # and showing its frequencies

输出是一个表格当然:

 1|1 2|1 2|2 3|1 3|2 4|2 4|3 
   2   2   2   2   3   2   2 

答案 2 :(得分:1)

答案与你说的不同,但我相信我的代码比我相信你的答案更多,我不能让自己犯下命名变量“sum”的罪:

 newfoo <- data.frame(
                 var1=unique(foo$var1),
                 n = with(foo, tapply(var2, var1, length) ),
                 svar = with(foo, tapply(var2, var1, sum) ) )
 newfoo
#  var1 n svar
#1    1 2    2
#2    2 4    6
#3    3 5    8
#4    4 4   10

编辑:(最初没想到Chase 做了什么试图告诉我。)

newfoo <- data.frame(
                  var1=unique(unique(foo)$var1),
                  n = with(unique(foo), tapply(var2, var1, length) ),
                  svar = with(unique(foo), tapply(var2, var1, sum) ) )

> newfoo
  var1 n svar
1    1 1    1
2    2 2    3
3    3 2    3
4    4 2    5