如何根據兩列字串匹配以及OR條件篩選R資料框?


要根據兩列中的字串匹配以及OR條件篩選R資料框,我們可以使用`grepl`函式,結合雙括號和OR運算子`|`。例如,如果我們有一個名為`df`的資料框,其中包含兩列字串(例如x和y),那麼可以透過以下方法基於任何一列中的特定字串匹配進行篩選:

語法

df[grepl("text",df[["x"]])|grepl("text",df[["y"]]),]

檢視下面的例子來了解它是如何工作的。

示例1

考慮以下資料框:

 線上演示

f1<-sample(c("India","China","Egypt","UK"),20,replace=TRUE)
f2<-sample(c("India","China","Egypt","UK"),20,replace=TRUE)
v1<-rnorm(20)
df1<-data.frame(f1,f2,v1)
df1

輸出

      f1       f2         v1
1    India    India     0.58383357
2    UK       Egypt    -0.71045054
3    India    China    -0.07848666
4    Egypt    India     1.21017481
5    Egypt    UK       -0.81991817
6    Egypt    China     1.98979283
7    India    India     0.36160374
8    Egypt    China    -1.77619986
9    China    UK       -0.05397712
10   India    Egypt    -0.30372078
11   Egypt    India    -1.68623489
12   India    India    -0.41997104
13   India    China    -0.97064798
14   UK       Egypt     2.02704796
15   UK       Egypt    -0.47732133
16   China    China     0.53153059
17   Egypt    UK       -1.71608164
18   Egypt    India    -0.73298689
19   UK       UK        1.83674440
20   China    China    -1.12186527

基於在任意前兩列中匹配“India”來篩選`df1`:

df1<-df1[grepl("India",df1[["f1"]])|grepl("India",df1[["f2"]]),]
df1
      f1      f2         v1
1   India   India     0.58383357
3   India   China    -0.07848666
4   Egypt   India     1.21017481
7   India   India     0.36160374
10  India   Egypt    -0.30372078
11  Egypt   India    -1.68623489
12  India   India    -0.41997104
13  India   China    -0.97064798
18  Egypt   India    -0.73298689

示例2

 線上演示

g1<-sample(c("Male","Female"),20,replace=TRUE)
g2<-sample(c("Male","Female"),20,replace=TRUE)
v2<-rpois(20,5)
df2<-data.frame(g1,g2)
df2

輸出

    g1      g2
1  Female  Male
2  Female  Male
3  Female  Female
4  Male    Male
5  Male    Female
6  Female  Female
7  Female  Male
8  Male    Male
9  Male    Female
10 Male    Female
11 Female  Female
12 Male    Male
13 Male    Male
14 Male    Female
15 Female  Male
16 Female  Male
17 Female  Male
18 Male    Female
19 Female  Female
20 Male    Female

基於在任意前兩列中匹配“Female”來篩選`df2`:

df2<-df2[grepl("Female",df2[["g2"]])|grepl("Female",df2[["g2"]]),]
df2
     g1      g2
3   Female  Female
5   Male    Female
6   Female  Female
9   Male    Female
10  Male    Female
11  Female  Female
14  Male    Female
18  Male    Female
19  Female  Female
20  Male    Female

更新於:2021年3月6日

1K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.