假设您有以下两个data.frames:
set.seed(1)
x <- letters[1:10]
df1 <- data.frame(x)
z <- rnorm(20,100,10)
df2 <- data.frame(x,z)
(请注意,两个dfs都有一个名为&#34; x&#34;)的列
并且您想要总结df2 $ z的总和为&#34; x&#34;在df1中像这样:
df1 %.%
group_by(x) %.%
summarize(
z = sum(df2$z[df2$x == x])
)
这会返回错误&#34;无效的索引类型整数&#34; (翻译)。
但是当我更改列的名称&#34; x&#34;在两个dfs中的任何一个中,它都有效:
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(比如&#34; ID&#34;列),这可能是一个问题,除非有一个简单的方法。
我错过了什么吗?对于这个例子,可能还有其他方法可以获得相同的结果,但我有兴趣了解dplyr中是否可以这样做(或者为什么不这样做)。
(两个dfs不一定需要具有相同的唯一&#34; x&#34;值,如本示例所示)
答案 0 :(得分:2)
根据@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
答案 1 :(得分:1)
你可以尝试:
df2%.%filter(x%in%df1$x)%.%group_by(x)%.%summarise(sum(z))
HTH