【发布时间】:2020-01-11 19:33:36
【问题描述】:
我需要在两个因子之间聚合一个数字,但是我需要聚合的输出是一个与原始数据帧长度相同的向量,而不是一个汇总表,所以我可以附加它并最终将其输出为.xlsx 报告。
data <- data.frame(A = c("A","A","A","A","A","A","B","B","B","B","B","B","B","B","C","C","C","C","C","C"),
B = c(1,1,2,2,2,3,1,1,1,1,2,2,2,3,3,1,1,1,1,2),
X=c(0.17,0.15,0.30,0.36,0.47,0.43,0.50,0.38,0.38,0.47,0.40,0.29,0.46,0.14,0.03,0.34,0.42,0.35,0.19,0.27))
我需要对按 A 和 A 和 B 的唯一组合分组的 X 求和,并将其附加到数据框中,使其看起来像这样
我知道聚合函数,它计算我需要的数量,但以汇总表格式输出它们,然后我无法将其附加到数据框。
到目前为止,这是我想出的唯一方法 - 在我的实际 13000 行数据帧上运行需要 10 分钟,这似乎很 hacky,而且似乎还导致了我遇到的其他一些错误希望重做这一点可以解决。
TBL <- as.data.frame(table(data$A, data$B))
colnames(TBL) <- c("A", "B", "Freq")
#contains every unique combination of A and B
for (i in 1:NROW(TBL)){
INDEX <- which(data$A == TBL$A[i] & data$B == TBL$B[i])
Data$`X by AB`[INDEX] <- sum(data$X[INDEX])
}
【问题讨论】:
-
您的输入数据和预期输出似乎不匹配。
data有两行A = A(列名选择不当),而您的输出有 6 行。那是错字吗?除此之外,听起来你在追求ave。 -
是的,这是一个错字 - 现在已修复。为了更好地说明我想要实现的目标,我在写到一半时更改了虚构的数据,忘记在帖子中更改它。
标签: r