将值表替换为R中的条件

时间:2016-04-12 01:29:39

标签: r string replace match

我有数据集列表:

> 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。为什么?

先谢谢。

2 个答案:

答案 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]
}