Tôi có khung hai dữ liệu bằngdplyr inner_join bằng NA trên các cột nhân vật
a <- c(1,2,3)
b <- c(3,2,1)
c <- c('a','b',NA)
df1 <- data.frame(a=a, b=b, c=c, stringsAsFactors=FALSE)
df2 <- data.frame(a=a, b=b, c=c, stringsAsFactors=FALSE)
Tôi muốn sử dụng dplyr::inner_join
để
"trả lại tất cả các hàng từ x nơi có phù hợp với giá trị trong y, và tất cả các cột từ x và y "dplyr documentation
(mọi thứ giống nhau) nhưng dường như không hoạt động với NA
trong cột c
(loại chr
). Hành vi chuẩn này có không tham gia vào số NA
không?
Ví dụ
library(dplyr)
> inner_join(df1, df2)
Joining by: c("a", "b", "c")
a b c
1 1 3 a
2 2 2 b
không tham gia vào NA
. Tuy nhiên, tôi muốn nó trở lại giống như merge
> merge(df1, df2)
a b c
1 1 3 a
2 2 2 b
3 3 1 <NA>
Tôi đã hiểu lầm như thế nào inner_join
công trình trong trường hợp này và hành xử này như mô tả?
Xem chi tiết thêm
inner_join
trận NA
trên một cột số
a <- c(1,2,3)
b <- c(3,2,NA)
c <- c('a','b','c')
df1 <- data.frame(a=a, b=b, c=c, stringsAsFactors=FALSE)
df2 <- data.frame(a=a, b=b, c=c, stringsAsFactors=FALSE)
> inner_join(df1, df2)
Joining by: c("a", "b", "c")
a b c
1 1 3 a
2 2 2 b
3 3 NA c
Sửa
Như @thelatemail chỉ ra, inner_join
cũng hoạt động như merge
khi NA
là trong một cột yếu tố
df1 <- data.frame(a=a, b=b, c=c, stringsAsFactors=T)
df2 <- data.frame(a=a, b=b, c=c, stringsAsFactors=T)
inner_join(df1, df2)
Joining by: c("a", "b", "c")
a b c
1 1 3 a
2 2 2 b
3 3 3 <NA>
Chỉnh sửa 2
Nhờ @shadow để chỉ ra đây là một vấn đề được biết here và here
đẹp câu hỏi và các ví dụ cũng được trình bày. Thật thú vị khi lưu ý rằng 'inner_join' cũng hoạt động như dự định khi sử dụng dữ liệu ký tự được lưu trữ dưới dạng' factor's, ví dụ: thay đổi ví dụ đầu tiên của bạn 'df1 $ c <- factor (df1 $ c); df2 $ c <- yếu tố (df2 $ c); inner_join (df1, df2) ' – thelatemail
Đây là vấn đề đã biết. Xem [tại đây] (https://github.com/hadley/dplyr/issues/1022) hoặc [tại đây] (https://github.com/hadley/dplyr/issues/892) – shadow
Cảm ơn @shadow, tôi sẽ giữ một mắt ra cho một sửa chữa. – tospig