我想要做的是:
使用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"
非常感谢帮助。
答案 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")