giả sử bạn có hai data.frames sau:dplyr group_by và tóm tắt cho hai của df với cùng tên cột
set.seed(1)
x <- letters[1:10]
df1 <- data.frame(x)
z <- rnorm(20,100,10)
df2 <- data.frame(x,z)
(lưu ý rằng cả dfs đã một cột có tên là "x")
và bạn muốn tóm tắt tổng của df2 $ z cho các nhóm "x" trong df1 như sau:
df1 %.%
group_by(x) %.%
summarize(
z = sum(df2$z[df2$x == x])
)
điều này trả về lỗi "số nguyên chỉ số không hợp lệ" (đã dịch).
Nhưng khi tôi thay đổi tên của cột "x" trong bất kỳ một trong hai dfs, nó hoạt động:
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
tôi có thể tưởng tượng nhiều tình huống, nơi bạn có hai dfs với tên cùng một cột (giống như cột "ID"), đây có thể là vấn đề, trừ khi có một cách đơn giản xung quanh nó.
Tôi đã bỏ lỡ điều gì đó? Có thể có những cách khác để có được kết quả tương tự cho ví dụ này nhưng tôi quan tâm đến sự hiểu biết nếu điều này là có thể trong dplyr (hoặc có lẽ tại sao không).
(hai dfs không nhất thiết cần phải có cùng độc đáo "x" giá trị như trong ví dụ này)
@Arun bạn có thể chứng minh thế nào điều này sẽ làm việc trong ví dụ? –
@Arun cảm ơn bạn đã trả lời bằng ví dụ. điều này có vẻ là một giải pháp tốt với cách tiếp cận khác. tôi tự hỏi liệu có thể có trường hợp khác (có thể phức tạp hơn trong chức năng tóm tắt) trong đó có thể vẫn rất hữu ích khi sử dụng cách tiếp cận như được nêu trong câu hỏi của tôi (nhưng bây giờ tôi không thể đưa ra một ví dụ rõ ràng) –
done (https://github.com/hadley/dplyr/issues/417) –