计算数据帧中值的唯一组合,并汇总值
-
11-10-2019 - |
题
我想与独特的组合一起工作 var1
和 var2
在我的数据框中:
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
不隶属于 StackOverflow