R - 新变量的部分字符串匹配

时间:2014-05-24 14:35:24

标签: string r contains matching partial

我有一个很大的数据集,它有2个文本变量ABlength(A)< = length(B)B可以是带有一些额外字符的变量A(无顺序),也可以与A完全不同。所以我需要在这种情况下在我的数据表中创建新变量: 如果B包含A,则C = TRUE。我相信部分字符串匹配比普通字符串比较更适合我。

我的数据框示例:

Home      Pick  
Barc      Barcelona 0  
F Munch   FC munchen   
Lakers    Portland

我需要以这种方式添加新变量Side:

Home     Pick         Side    
Barc     Barcelona 0  True  
F Munch  FC munchen   True  
Lakers   Portland     False  

我试图解决这个问题:

data_n$Side <- stringMatch(data_n$Home, data_n$Pick, normalize = "YES")

但它会给出所有负面结果  Hoverer

stringMatch('barcel', 'Barcelona 0', normalize='YES')    

给出了必要的答案。我犯错的任何提示?

1 个答案:

答案 0 :(得分:1)

我不确定它的可靠性,但agrepl,部分模式匹配功能似乎对您的数据起作用。假设dat是您的原始数据,那么

## read in the original data
> txt <- "Home\tPick
  Barc\tBarcelona 0
  F Munch\tFC munchen
  Lakers\tPortland"
> dat <- read.table(text = txt, sep = '\t', header = TRUE)
##      Home        Pick
## 1    Barc Barcelona 0
## 2 F Munch  FC munchen
## 3  Lakers    Portland

使用agrepl

> d1 <- dat[,1]
> d2 <- dat[,2]
> dat$Side <- sapply(seq(nrow(dat)), function(i){
      agrepl(d1[i], d2[i], ignore.case = TRUE)
      })
> dat
##      Home        Pick  Side
## 1    Barc Barcelona 0  TRUE
## 2 F Munch  FC munchen  TRUE
## 3  Lakers    Portland FALSE