2016-09-13 68 views
1

我有一個三列和數千行的數據框。前兩列(x和y)包含字符串,第三列(z)包含數字數據。我需要根據前兩列中的匹配值對數據框進行子集分析。基於字符串匹配的子集R數據框在兩列

x <- c("a", "b", "c", "d", "f", "g", "h", "i", "j", "k") 
    y <- c("h", "b", "k", "a", "g", "d", "i", "c", "f", "j") 
    z <- c(1:10) 
    df <- data.frame(x, y, z) 

     x y z 
    1 a h 1 
    2 b b 2 
    3 c k 3 
    4 d a 4 
    5 f g 5 
    6 g d 6 
    7 h i 7 
    8 i c 8 
    9 j f 9 
    10 k j 10 

說這是我的表,我感興趣的值是 「A」, 「C」, 「F」, 「h」 和 「K」。我只想要回其中x和y包含五個一排,所以在這種情況下,行1和3

我已經試過:

df2 <- filter(df, 
      x == ("a" | "c" | "f" | "h" | "k") & 
      y == ("a" | "c" | "f" | "h" | "k")) 

但這不起作用因素或字符串。有沒有相同或其他方法呢?

在此先感謝。

回答

1

我認爲這將返回你在找什麼:

# build vector of necessary elements 
mustHaves <- c("a", "c", "f", "h", "k") 
# perform subsetting 
df[with(df, x %in% mustHaves & y %in% mustHaves),] 
    x y z 
1 a h 1 
3 c k 3 

數據

df <- data.frame(x, y, z, stringsAsFactors = FALSE) 
+0

一個完美的答案,這麼快!非常感謝。 –

0

隨着dplyr

df2 <- filter(df, 
       x %in% c("a" ,"c","f" ,"h","k") & 
        y %in% c("a" ,"c","f" ,"h","k")) 
df2 
    x y z 
1 a h 1 
2 c k 3 
+1

謝謝,這也很完美。所以我的錯誤是使用==代替%中的%。我對R很新,所以我之前沒有遇到%。 –

+0

沒問題,yep,'%in%''基本上匹配下面的vector中的任何字符串。考慮接受上述解決方案之一,以便關閉問題。 –

0

什麼:

df2 <- filter(df, grepl("[acfhk]",x) & grepl("[acfhk]",y)) 

使用dplyr

+0

謝謝,這也很完美。三種不同的方式來實現相同的事情。我有很多要學習的。 –

+0

不客氣。如果您希望處理真正大的數據集,那麼可能值得檢查哪一個最快。 – kwicher

相關問題