避免不匹配的ID

时间:2015-08-24 12:05:55

标签: r

我根据外部向量对数据帧进行子集化和排序,该外部向量包含与列名称不匹配的ID。如何在最终的data.frame中避免使用NA?

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 个答案:

答案 0 :(得分:1)

我们可以在nomatch=0中使用match。默认情况下,非匹配元素将被“NA”占用。当存在NA元素时,它会为NA中的每个NA添加额外的match行。

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

或者我们可以使用%in%来获取“name”中也在目标中的元素的逻辑索引,并将其用作行索引。

df[df$name %in% target,]