我根据外部向量对数据帧进行子集化和排序,该外部向量包含与列名称不匹配的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
答案 0 :(得分:1)
我们可以在nomatch=0
中使用match
。默认情况下,非匹配元素将被“NA”占用。当存在NA
元素时,它会为NA
中的每个NA
添加额外的match
行。
df[match(target, df$name, nomatch=0),]
或者我们可以使用%in%
来获取“name”中也在目标中的元素的逻辑索引,并将其用作行索引。
df[df$name %in% target,]