计算数据框中值的唯一组合和汇总值
Posted
技术标签:
【中文标题】计算数据框中值的唯一组合和汇总值【英文标题】:Calculate unique combinations of values in dataframe, and summary values 【发布时间】:2011-06-09 11:40:48 【问题描述】:我想在我的数据框中使用 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
【问题讨论】:
扩展答案以解决您的后续问题 【参考方案1】: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))
应该给你你所追求的。
【讨论】:
(plyr
在 2014 年被 dplyr
取代,此后又被 tidyr
和相关软件包的 tidyverse 取代)
@smci - 如果您有精力,请随时编辑我的答案以包含更现代的工具。我个人已经转向data.table
,但tidyverse
软件包在很大程度上实现了类似的目标。
现在只是告诉人们使用dplyr
而不是plyr
【参考方案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
【讨论】:
【参考方案3】:答案与你所说的不同,但我更相信我的代码而不是你的答案,我不能让自己犯下将变量命名为“sum”的罪:p>
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
【讨论】:
我认为这里的答案存在差异是因为 OP 正在查看对象unique(foo)
的长度和总和,而不是他的原始数据框。好点re:命名一列“总和”。
我认为这是因为他的代码中的“foo”与他的表格演示中的“foo”不同。代码向量中有 4 个“2”,但他数了 2 个“2”。
第一个表格演示文稿是unique(foo)
,而不是foo
。下表中的计数也使用unique(foo)
。以上是关于计算数据框中值的唯一组合和汇总值的主要内容,如果未能解决你的问题,请参考以下文章