gpt4 book ai didi

在 R 中使用 sum+product 进行重铸

转载 作者:行者123 更新时间:2023-12-01 15:50:42 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

x   y   value   weight
10 1 red 1
3.4 5 blue 2
10 10 blue 0.5
3 8 blue 0.5
3 8 red 4
10 1 blue 1
3 8 blue 2
3 8 blue 0.25

我想重新构造它,使每一行都是“x”和“y”的唯一组合,而列是每个不同“值”值的“权重”的总和。如果可能的话,我还希望有“value”值的原始计数列。因此,对于这些数据来说:

x   y   red_count   blue_count  red_sum_of_weights  blue_sum_of_weights
10 1 1 1 1 1
3.4 5 0 1 0 2
10 10 0 0 1 0.5
3 8 1 3 4 2.75

有没有办法通过 reshape 或 reshape2 来做到这一点?我可以让它对值进行计数

dcast(data,x+y~value)

但我一直无法弄清楚如何让它以我想要的方式使用权重。我需要它能够处理任意数量的可能值级别以及原始数据集中每个 x*y 组合的任意不同行数。我已经编写了自己的代码,只是使用 for 循环来执行此操作,但运行时间非常长 - 到目前为止,完成 600k 行数据集的前 15% 需要 6 个小时,这不太实用!但我确信必须有一种方法可以利用现有功能来做到这一点?

预先非常感谢您的帮助!

最佳答案

您可以结合使用 dplyrreshape2 函数来完成此操作。首先,按xyvalue分组(我们将后者的名称更改为color只是为了避免熔化后重复列名),然后计算每个子组的计数和总和。然后融化结果,将新计算的摘要放入“长”格式。最后,dcast 以获得您要求的“宽”格式。

library(reshape2)
library(dplyr)

df %>% group_by(x,y,color=value) %>%
summarise(count=n(), sum=sum(weight)) %>%
melt(id.var=c("x","y","color")) %>%
dcast(x + y ~ variable + color)
     x  y count_blue count_red sum_blue sum_red
1 3.0 8 3 1 2.75 4
2 3.4 5 1 NA 2.00 NA
3 10.0 1 1 1 1.00 1
4 10.0 10 1 NA 0.50 NA

关于在 R 中使用 sum+product 进行重铸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38507729/

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