我正在尝试以行方式基于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中的列以行方式替换这些元素的方法。
答案 0 :(得分:4)
sub
和gsub
无法向量化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