假设您有以下两个data.frames:dplyr GROUP_BY和总结了两个DF与相同的列名
set.seed(1)
x <- letters[1:10]
df1 <- data.frame(x)
z <- rnorm(20,100,10)
df2 <- data.frame(x,z)
(注意,这两个DFS有一列名为“X”)
和你要总结DF2 $的z为“X”组中的总额DF1这样的:
df1 %.%
group_by(x) %.%
summarize(
z = sum(df2$z[df2$x == x])
)
这将返回错误“无效的索引类型整数”(翻译)。
但是,当我在这两个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具有相同的列名(就像一个“ID”列),这可能是一个问题,除非有一个简单的方法。
我错过了什么吗?对于这个例子,可能有其他方法可以得到相同的结果,但我有兴趣了解dplyr是否可行(或者为什么不)。
(两个DFS不必然需要具有相同的独特的 “X” 值在这个例子中)
@阿伦你能证明这将如何在这个例子中工作吗? –
@阿伦谢谢你回答一个例子。这似乎是一个不同的方法很好的解决方案。我想知道是否可能有其他情况(可能在总结功能中更复杂),在这种情况下使用我的问题中指出的方法可能仍然非常有用(但现在我不能拿出一个很好的例子) –
done( https://github.com/hadley/dplyr/issues/417) –