假设您有以下两个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"值)
根据@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)