如何将属性添加到grep()输出

时间:2015-12-10 13:35:46

标签: r grep output

我想要做的是: 使用grep()函数在data.frame("新闻")中搜索模式(数字列表,我称之为#34; toMatch")。所以,我想要它做的是在新闻中搜索这些数字并返回匹配(格式为#34;数字","相应的新闻")。不幸的是,到目前为止我只能获得相应新闻的列表。知道我如何添加一个属性与匹配中的相应数字到输出? (在某种程度上创建键值对作为输出)

这是我的代码的简单示例:

News <- c ("AT000000STR2 is schwierig", "AT", "ATI", "AT000000STR1")
toMatch <- c("AT000000STR1","AT000000STR2","DE000000STR1","DE000000STR2")
matches <- unique (grep(paste(toMatch,collapse="|"),News, value=TRUE))
matches

结果如下:

> matches
[1] "AT000000STR2 is schwierig" "AT000000STR1" `

我想要的是一个列表或更好的Excel文件,如下所示:

 AT000000STR2 "AT000000STR2 is schwierig" 
 AT000000STR1 "AT000000STR1"

非常感谢帮助。

2 个答案:

答案 0 :(得分:3)

这样的事可能会有所帮助:

#name toMatch with its names
names(toMatch) <- toMatch

#create a list with the format you request
myl <-
lapply(toMatch, function(x) {
  grep(x, News, value=TRUE)
  })
#or in a more compact way as @BenBolker says in the comments below
#myl <- lapply(toMatch, grep, x=News, value=TRUE)

#remove the unmatched
myl[lapply(myl,length)>0]

输出:

$AT000000STR1
[1] "AT000000STR1"

$AT000000STR2
[1] "AT000000STR2 is schwierig"

答案 1 :(得分:2)

您当前的方法会返回唯一匹配项,但之后您无法将它们与相关的“匹配”相关联。

这可能是一个开始:使用lapply我们为toMatch的所有元素创建一个匹配列表,然后将它们与toMatch绑定在一起。

matched  <- lapply(toMatch, function(x){grep(x,News,value=T)})
#turn unfound matches to missings. You can remove these, but I don't like
#generating implicit missings
matched[sapply(matched,length)==0]<-NA

res <- cbind(toMatch,matched)
res
     toMatch        matched                    
[1,] "AT000000STR1" "AT000000STR1"             
[2,] "AT000000STR2" "AT000000STR2 is schwierig"
[3,] "DE000000STR1" NA                         
[4,] "DE000000STR2" NA         

写csv是微不足道的:

write.csv(res,"yourfile.csv")