2017-03-27 37 views
1

例如,我有像data.frame(第一行是數據幀的名稱):如何提取數據框中的值與匹配矢量的值?

A B C D 
a i e e 
a e i o 
a a i i 
i - a m 
a - a m 

我有一個矢量cc= c('a', 'e', 'i'),我想提取與所述數據幀中的列值僅包含矢量cc,因爲BD列包含的值是不是在cc,所以它們應該被排除在外,而期望的結果應該看起來像

A C 
    a e 
    a i 
    a i 
    i a 
    a a 

我嘗試代碼:

apply(df, 2 , function(x) x%in% cc) 

但結果將是

A  B  C  D 
TRUE TRUE TRUE TRUE 
TRUE TRUE TRUE TRUE 
TRUE TRUE TRUE TRUE 
TRUE FALSE TRUE FALSE 
TRUE FALSE TRUE FALSE 

我被困在這裏和任何人都可以告訴我,我能在r中做?

+0

謝謝@Ron akShah,我只是構建了一個像這樣的數據框來顯示我的問題 –

+1

你幾乎在那裏。你需要在你的'apply'函數中使用'all'來獲得包含'cc'向量中所有值的列的TRUE值。 –

回答

0

我們可以嘗試

df1[sapply(df1, function(x) all(x %in% cc))] 

或用Filter

Filter(function(x) all(x %in% cc), df1) 
# A C 
#1 a e 
#2 a i 
#3 a i 
#4 i a 
#5 a a 
+1

謝謝@ akrun,它的工作原理!我會接受你的解決方案 –

0

這裏的另一種選擇 - 使用anyNAmatch一起:

mydf[vapply(mydf, function(x) !anyNA(match(x, cc)), logical(1L))] 
## A C 
## 1 a e 
## 2 a i 
## 3 a i 
## 4 i a 
## 5 a a 
相關問題