我想与独特的组合一起工作 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

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

  • n, ,出现的数量 var1 价值和
  • svar, ,每个总和 var1 价值 var2 值。

输出看起来像这样:

      var1  n    svar
1     1     1    1
2     2     2    3
3     3     2    3
4     4     2    5
有帮助吗?

解决方案

unique(foo) 应该给你你之后的东西。

2014年更新:使用 dplyr 代替 plyr

我建议看图书馆 plyr 用于其他汇总类型任务,或 tapply(), aggregate() 等。

虽然为此练习多余,但您将如何使用plyr:

library(plyr)
ddply(foo, .(var1), 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))

应该给你你所追求的。

其他提示

希望我能很好地理解您的问题,请尝试:

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 

答案与您所说的不同,但是我比我相信您的答案更信任我的代码,而且我不能让自己承担命名变量“ 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

编辑:(起初没有弄清楚什么 做过 尝试告诉我。)

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top