我有一个与此类似的数据集:
var1 <- c(1, 2, 2, 4, 5)
var2 <- c("Place1", "Place2", "Place3", "Place4", "Place5")
var3 <-c(2, 4, 6, 8, 10)
mydata <- data.frame(var1, var2, var3)
我想通过var1中的因子聚合数据集,得到var3的均值 . 但是,当我使用aggregate命令执行此操作时:
aggregate(mydata, list(mydata$var1), mean)
它返回var2的NA . 理想情况下,它会返回如下所示的内容:
var1 var2 var3
1 Place1 2
2 Place2 + Place3 5
4 Place 4 8
5 Place 5 10
我无法弄清楚如何使用aggregate命令执行此操作 . 我还尝试将原始数据集中的var1和var2分配给新数据集,进行聚合,然后将其合并回来,但merge命令再次放入var1的多个值 .
4 回答
对于像这样的事情,你最好使用“data.table”:
或者“dplyr”:
更新
根据您的评论,您可能希望查看以下选项...
这是一些示例数据:
首先,我们
melt
,然后我们"aggregate"使用"data.table",然后我们使用dcast.data.table
返回宽格式 .这是使用“dplyr”和“tidyr”进行更新的等效方法:
尝试:
别忘了tapply .
使用mydata data.frame是可选的 .
对于注释中请求的同一data.frame中的多个变量:
可以使用[,3:5]但是你需要获得正确的列,例如grep .
当你想对所有列执行相同的操作时使用 1)
aggregate
但是在这里我们想要var2
上的一个操作和var3
上的另一个操作(或者其余的) . 因此我们需要两次使用aggregate
. 我们本可以将第二个aggregate
写成aggregate(var3 ~ var2, mydata, mean)[-1]
,但是我们使用了显示的形式,这样如果在var3
之后还有其他变量,它们也将被平均 .[-1]
是由于aggregate
表达式产生var1
列而我们只需要其中一个 .赠送:
2) “您还可以考虑使用多种软件包之一进行此类操作 . 例如:
或者如果前两个之后的所有变量都要进行平均,则每个变量分别进行:
Update 添加了第二个解决方案并进行了简化 .