2015-06-18 59 views
1

數據集的各行我有這樣如何從另一矢量的值子集中的R

n <- c("abc;xml", "abc;derm;sip", "xol;exp", "ban;lopic", "LPLL2", "LPLL") 
fac <- sample(n, 6, replace = F) 
d <- data.frame(x = 1:6, fac = fac) 
d 

    x   fac 
1 1  abc;xml 
2 2 ban;lopic 
3 3  xol;exp 
4 4 abc;derm;sip 
5 5   LPLL 
6 6  LPLL2 

一個數據幀和一矢量是這樣的:

vec=c("abc", "xml","sip", "exp", "lopic", "LPLL") 

我想子集與矢量中的值具有相似匹配的行。

我試過這段代碼:

nam="abc|xml|sip|exp|lopic|LPLL" 
subset(d, regexpr(nam, d$fac) > 0) 

但它不能正常工作,因爲包括和LPLL2!

回答

1

你可以試試這個:

ind<-lapply(lapply(strsplit(as.character(d$fac),';'),function(x)x %in% vec),any) 
d[unlist(ind),] 
2

的問題是,你的正則表達式會發現任何比賽,哪怕是不準確。這將工作:

index <- sapply(strsplit(as.character(d$fac), split = ";"), function(x) any(x%in% vec)) 
d[index, ] 
    x   fac 
1 1  xol;exp 
2 2  abc;xml 
3 3 ban;lopic 
5 5   LPLL 
6 6 abc;derm;sip