检查列是否包含r中另一列的一部分

时间:2016-05-01 23:58:41

标签: r string

我有一个数据框,在一列中有注册号,在另一列中有正确的注册号

a <- c("0c1234", "", "2468O")
b <- c("Oc1234", "Oc5678", "Oc9123")
df <- data.frame(a, b)

我希望更新第1行,因为输入错误,第2行为空,所以我想更新字段。第3行有一个不同的数字,所以我希望保留这个数字,但为这一行创建一个新条目(在另一个程序中,我只需要知道它需要插入)。

如何制作此数据框?

c <- c("update", "update", "insert")
df2 <- data.frame (a,b,c)

我已经尝试了grepl和str_detect,并且还考虑了grepl的正则表达式 - 即检查列a中的4个数字组合是否在列b中但是尚未成功

2 个答案:

答案 0 :(得分:0)

您可以这样做:

df$c <- ifelse(a == '', 'update', 'insert')

您的输出如下(问题中需要df2):

       a      b      c
1 0c1234 Oc1234 insert
2        Oc5678 update
3  2468O Oc9123 insert

当然,如果您的原始数据框具有&#39;交易&#39;按顺序排列。

答案 1 :(得分:0)

您可以这样做:

df <- data.frame(a,b,stringsAsFactors = F)

for (i in seq(1,nrow(df))){
    if (df$a[i] == '' || length(agrep(df$a[i],df$b[i])) > 0)
        df$c[i] <- 'update'
    else
        df$c[i] <- 'insert'
}

df

##       a      b      c
##1 0c1234 Oc1234 update
##2        Oc5678 update
##3  2468O Oc9123 insert