这是我的问题:
假设我有一个数据框显示某些项目的某些观察结果。这些观察包含 numeric 值以及一些字符属性。它是这样的:
items <- c("item1","item1","item1","item2","item2","item3")
proptyA <- c("prop1", "prop1", "prop1", "prop2", "prop2", "prop2")
proptyB <- c("prop11", "prop11", "prop11", "prop11", "prop11", "prop12")
proptyC <- c("prop22", "prop22", "prop22", "prop22", "prop22", "prop22")
values <- c(1:6)
rawDF <- data.frame(items, proptyA, proptyB, proptyC, values, stringsAsFactors = F)
items proptyA proptyB proptyC values
1 item1 prop1 prop11 prop22 1
2 item1 prop1 prop11 prop22 2
3 item1 prop1 prop11 prop22 3
4 item2 prop2 prop11 prop22 4
5 item2 prop2 prop11 prop22 5
6 item3 prop2 prop12 prop22 6
我正在寻找一种重建数据框的方法,以围绕&#39;项目&#39;而不是目前的观察。得到的数据帧将呈现一些值的聚合(例如总和)。没有真正的聚合&#39;由于每个项目只有一种类型的唯一属性,因此需要进行属性。
结果数据框应如下所示:
items proptyA proptyB proptyC values
1 item1 prop1 prop11 prop22 6
2 item2 prop2 prop11 prop22 9
3 item3 prop2 prop12 prop22 6
可悲的是,我没有看到如何在不诉诸循环的情况下获得此结果。当然tapply(rawDF$values, rawDF$items, sum)
会对数字位进行排序,但属性中的字符呢。
然而,由于我正在使用的真实数据集的大小,循环对我来说不是一个选项。
我将不胜感激任何帮助。使用额外的包装等绝对没问题,但如果有的话,更喜欢基础R解决方案。
谢谢!
答案 0 :(得分:2)
使用aggregate
aggregate(rawDF$values, by=rawDF[, c("items", "proptyA", "proptyB", "proptyC")], sum)
items proptyA proptyB proptyC x
1 item1 prop1 prop11 prop22 6
2 item2 prop2 prop11 prop22 9
3 item3 prop2 prop12 prop22 6
修改:使用公式类
aggregate(values~., rawDF, sum)
items proptyA proptyB proptyC values
1 item1 prop1 prop11 prop22 6
2 item2 prop2 prop11 prop22 9
3 item3 prop2 prop12 prop22 6