2015-08-24 62 views
1

我按照包含與col名稱不匹配的ID的外部向量對子集進行子集化和排序。我如何避免最終data.frame中的NAs?避免不匹配的ID

a<-c(2, 4, 6, 6, 8, 10, 12, 13, 14) 
b<-c(21:29) 
name<-c("O1", "O2", "O3", "O4", "O5","O6", "O7", "O8", "O9") 
ID<-rep(c("no","bo", "fo"), each=3) 
df<-data.frame(name,ID, a, b) 

target<-c("O5","O6", "O7", "O3", "O4", "O1", "O2", "O10", "O11") 
    newdf <- df[match(target, df$name),] 

    name ID a b 
5 O5 bo 8 25 
6 O6 bo 10 26 
7 O7 fo 12 27 
3 O3 no 6 23 
4 O4 bo 6 24 
1 O1 no 2 21 
2 O2 no 4 22 
NA <NA> <NA> NA NA 
NA.1 <NA> <NA> NA NA 

回答

1

我們可以在match中使用nomatch=0。默認情況下,不匹配的元素將被「NA」佔據。如果存在NA元素,則會爲match中的每個NA添加一行額外的NA行。

df[match(target, df$name, nomatch=0),] 

或者我們可以使用%in%獲得在同樣的目標,並用其作爲行索引「名稱」元素的邏輯索引。

df[df$name %in% target,] 
+0

如何使用第二種方法保持目標訂單? – Al14

+1

@ Al14如果訂單很重要,你應該使用'match' – akrun