2
我有一个向量,为此我想检查每个元素对数据帧的每一行。它涉及一个grep函数,因为要检查的元素被隐藏在其他文本中。检查数据帧的所有行的向量的每个元素
随着this forum帮助下,我得到这个代码:
mat=data.frame(par=c('long A story','C story', 'blabla D'),val=1:3)
vec=c('Z','D','A')
mat$label <- NA
for (x in vec){
is.match <- lapply(mat$par,function(y) grep(x, y))
mat$label[which(is.match > 0)] <- x
}
的问题是,它需要几分钟来执行。有没有一种方法来对此进行矢量化?
我喜欢这样。如果你不想有太多的一次性使用对象(比如'which.matches'和'what.matches'),它甚至可以放在一行中。 – A5C1D2H2I1M1N2O1R2T1 2012-08-01 09:13:58
嗯,你说得对。实际上并没有必要添加'mat $ label < - NA'。我会补充一点。 – 2012-08-01 09:16:23
优秀!一个很大的改进。实际上,'vec'包含[多个]单词,所以表达式grep(“[ZDA]”变得凌乱。因此我有:expr = paste(vec,collapse ='|'); mat $ label [grep(expr ,mat $ $ par)] = regmatches(mat $ par,regexpr(expr,mat $ par)) – Henk 2012-08-01 11:17:48