使用R中的另一列在data.frame中逐行删除字符串

时间:2016-05-01 19:41:28

标签: regex r dataframe

我正在尝试以行方式基于data.frame中的另一列剪切/删除更大字符串中的字符串。

例如,在此data.frame col2应从col1

中删除
kat1 <- data.frame(col1 = c("A123Testz45", "66Test255"), col2 = c("Testz", "Test2"))

结果为

          col1     col2
1     A123 45     Testz
2       66 55     Test2

我尝试了sub

的变体
kat1$col1 <- sub(kat1$col2, " ", kat1$col1)

但这会导致

Warning message: In sub(kat1$col2, " ", kat1$col1) : argument 'pattern' has length > 1 and only the first element will be used 

因此,我正在考虑使用REGEX中的列以行方式替换这些元素的方法。

1 个答案:

答案 0 :(得分:4)

subgsub无法向量化pattern(请参阅?gsub)。如果您正在寻找简单性和效率,请尝试使用stringi(或stringr这是stringi包装器)

with(kat1, stringi::stri_replace_all_fixed(col1, col2, " "))
# [1] "A123 45" "66 55"   

使用基数R,你可以使用apply(低效率)来完成它,比如

apply(kat1, 1, function(x) sub(x[["col2"]], " ", x[["col1"]], fixed = TRUE))
# [1] "A123 45" "66 55" 

@docendo更好的基础R建议是在向量上使用mapply以避免矩阵转换

transform(kat1, col1 = mapply(sub, col2, " ", col1, fixed = TRUE))
#      col1  col2
# 1 A123 45 Testz
# 2   66 55 Test2