[英]dplyr filtering on multiple columns using "%in%"
我有一個包含多列(ID、數字、位置、字段、重量)的數據框 (df1)。 我還有另一個數據框 (df2),其中包含更多信息(ID、PassRate、Number、Weight)。
我正在嘗試使用 dplyr 和 %in% 來過濾掉 df1 中與 df2 具有相同兩個值的行。
到目前為止,我有:
df_sub <- subset(df1, df1$ID %in% df2$ID & df1$Weight %in% df2$Weight)
但這只是第一個條件的子集......知道為什么嗎?
嘗試這個,
df1[paste0(df1$ID, df1$Weight) %in% paste0(df2$ID, df2$Weight), ]
您正在做的是通過df2
值過濾df1
,而不是找到行匹配
試試這個示例數據
df1
ID Weight
1 a
2 b
df2
ID Weight
1 b
2 a
使用您的功能
df_sub <- subset(df1, df1$ID %in% df2$ID & df1$Weight %in% df2$Weight)
> df_sub
ID Weight
1 2 b
2 1 a
實際上,它返回如下布爾值,導致所有df1
值都顯示在df2
:
True True
True True
使用我的,結果是沒有一個匹配:
df1[paste0(df1$ID, df1$Weight) %in% paste0(df2$ID, df2$Weight), ]
[1] ID Weight
<0 rows> (or 0-length row.names)
從問題和示例代碼中,不清楚您是否希望df_sub
包含df1
中在df2
有匹配項的行,或者沒有匹配項的行。 dplyr::semi_join()
將返回匹配的行, dplyr::anti_join()
將返回沒有匹配的行。
df_sub <- semi_join(x=df1, y=df2, by=c("ID","Weight"))
或者
df_sub <- anti_join(x=df1, y=df2, by=c("ID","Weight"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.