gpt4 book ai didi

r - 使用聚合按两个条件合并数据框的列

转载 作者:行者123 更新时间:2023-12-04 12:21:23 24 4
gpt4 key购买 nike

我有一个这样的矩阵

  P   A   B  C 
1 2 0 5
2 1 1 3
3 0 4 7
1 1 1 0
3 1 1 0
3 0 2 1
2 3 3 4

我想按 P 和每一列合并/排序行。这样每个 P 值对每一列都有一次,并且将每列中每个 P 的值相加。结果应该是:
 P  A  B  C
1 3 0 0
1 0 1 0
1 0 0 5
2 4 0 0
2 0 4 0
2 0 0 7
3 1 0 0
3 0 7 0
3 0 0 8

我已经试过了 aggregate但它只能帮助我总结所有列的每个 P 值,以便每个 P 只有一行。

最佳答案

一种想法是在 P 上拆分您的数据框并应用自定义函数( fun1 ),该函数创建一个值为 0 的矩阵,并将对角线替换为列的总和。 IE。

fun1 <- function(x){
m1 <- matrix(0, ncol = ncol(x) - 1, nrow = ncol(x) - 1)
diag(m1) <- sapply(x[-1], sum)
return(m1)
}

l1 <- split(df, df$P)
do.call(rbind, lapply(l1, fun1))

# [,1] [,2] [,3]
# [1,] 3 0 0
# [2,] 0 1 0
# [3,] 0 0 5
# [4,] 4 0 0
# [5,] 0 4 0
# [6,] 0 0 7
# [7,] 1 0 0
# [8,] 0 7 0
# [9,] 0 0 8

或者让它达到你想要的输出,然后
final_df <- as.data.frame(cbind(rep(names(l1), each = ncol(df)-1), 
do.call(rbind, lapply(l1, fun1))))
names(final_df) <- names(df)

final_df
# P A B C
#1 1 3 0 0
#2 1 0 1 0
#3 1 0 0 5
#4 2 4 0 0
#5 2 0 4 0
#6 2 0 0 7
#7 3 1 0 0
#8 3 0 7 0
#9 3 0 0 8

关于r - 使用聚合按两个条件合并数据框的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41219870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com