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

tal*_*lat 5 r dataframe dplyr

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

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

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

你想在df1中总结df2 $ z的总和为"x",如下所示:

df1 %.%
  group_by(x) %.%
  summarize(
    z = sum(df2$z[df2$x == x]) 
   )
Run Code Online (Sandbox Code Playgroud)

这将返回错误"invalid indextype integer"(已翻译).

但是当我在两个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
Run Code Online (Sandbox Code Playgroud)

我能想象它,这可能是一个问题,很多情况下,你有两个DFS有相同的列名(像一个"ID"列),除非它周围有一个简单的方法.

我错过了什么?对于这个例子,可能还有其他方法可以获得相同的结果,但我有兴趣了解dplyr中是否可以这样做(或者为什么不这样做).

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

Aru*_*run 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
Run Code Online (Sandbox Code Playgroud)