gpt4 book ai didi

r - dplyr group_by 并汇总具有相同列名的两个 df

转载 作者:行者123 更新时间:2023-12-02 03:45:29 25 4
gpt4 key购买 nike

假设您有以下两个 data.frame:

set.seed(1)
x <- letters[1:10]
df1 <- data.frame(x)
z <- rnorm(20,100,10)
df2 <- data.frame(x,z)

(请注意,两个 dfs 都有一个名为“x”的列)

并且您想要总结 df1 中“x”组的 df2$z 之和,如下所示:

df1 %.%
group_by(x) %.%
summarize(
z = sum(df2$z[df2$x == x])
)

这会返回错误“无效的索引类型整数”(已翻译)。

但是当我更改两个 dfs 中任何一个中的列“x”的名称时,它会起作用:

df2 <- data.frame(x1 = x,z) #column is now named "x1", it would also work if the name was changed in df1

df1 %.%
group_by(x) %.%
summarize(
z = sum(df2$z[df2$x1 == x])
)

# x z
#1 a 208.8533
#2 b 205.7349
#3 c 185.4313
#4 d 193.8058
#5 e 214.5444
#6 f 191.3460
#7 g 204.7124
#8 h 216.8216
#9 i 213.9700
#10 j 202.8851

我可以想象很多情况,其中两个 dfs 具有相同的列名(如“ID”列),这可能会成为问题,除非有一种简单的方法来解决它。

我是不是错过了什么?对于此示例,可能还有其他方法可以达到相同的结果,但我有兴趣了解这在 dplyr 中是否可行(或者也许为什么不可行)。

(两个 dfs 不一定需要具有与本示例中相同的唯一“x”值)

最佳答案

根据 @beginneR 的评论,我猜它会是这样的:

inner_join(df1, df2) %.% group_by(x) %.% summarise(z=sum(z))

Joining by: "x"
Source: local data frame [10 x 2]

x z
1 a 208.8533
2 b 205.7349
3 c 185.4313
4 d 193.8058
5 e 214.5444
6 f 191.3460
7 g 204.7124
8 h 216.8216
9 i 213.9700
10 j 202.8851

关于r - dplyr group_by 并汇总具有相同列名的两个 df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23502523/

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