簡體   English   中英

dplyr 使用“%in%”對多列進行過濾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM