我有数据集列表:
> data1
[1] /index.php/search?
[2] /tabel/graphic1_.php?
[3] /mod/Layout/variableView2.php?
[4] /table/tblmon-frameee.php?
和一张表:
> tes
[1] http://aladdine/index.php/search?
[2] http://aladdine/mod/params/returnParams.php
[3] http://aladdine/mod/Layout/variableView2.php
[4] http://aladdine/index.php/bos/index?
[5] http://aladdine/index.php/Bos
我想使用数据集上的索引更改测试表的值,该数据集在数据集中具有匹配的字符串值。 我试过这段代码:
for(i in 1:length(dataset)){
p = data[i]
for(j in 1:length(tes)){
t = tes [j]
if(grepl(p, t)){
tes[j]=i
}
else tes[j] = "-"
}
}
我的期望结果是这样,
> tes
[1] 1
[2] -
[3] 3
[4] -
[5] -
但是,我总是收到警告信息invalid factor level, NA generated
。为什么?
先谢谢。
答案 0 :(得分:0)
以下代码并不能完全满足您的需求,但实际上它应该为您提供相同的信息。
startUpdatingLocation
例如,[[1]]中的第一个输出告诉" tes"匹配" data1"中的第一个元素等...
答案 1 :(得分:0)
可能不是我在此代码中用于循环的最快的一个,但希望这提供了一个解决方案:
require(data.table)
data1<-c("/index.php/search?","/tabel/graphic1_.php?","/mod/Layout/variableView2.php?","/table/tblmon-frameee.php?")
tes<-c("http://aladdine/index.php/search?","http://aladdine/mod/params/returnParams.php" ,"http://aladdine/mod/Layout/variableView2.php","http://aladdine/index.php/bos/index?","http://aladdine/index.php/Bos")
d<-data.table(d=data1,t=tes)
d$id<-seq(1:nrow(d))
for (i in 1:nrow(d))
{
d$index[i]<-lapply(data1,FUN=function(x) {ifelse(length(grep(x,tes[i]))>0,d$id[i],"-")})[i]
}