我正在尝试以行方式基于 data.frame 中的另一列从较大字符串中剪切/删除字符串。
例如,在此 data.frame 中col2应从中删除col1
kat1 <- data.frame(col1 = c("A123Testz45", "66Test255"), col2 = c("Testz", "Test2"))
Run Code Online (Sandbox Code Playgroud)
结果是
col1 col2
1 A123 45 Testz
2 66 55 Test2
Run Code Online (Sandbox Code Playgroud)
我尝试过subwith的变体
kat1$col1 <- sub(kat1$col2, " ", kat1$col1)
Run Code Online (Sandbox Code Playgroud)
但这会导致
Warning message: In sub(kat1$col2, " ", kat1$col1) : argument 'pattern' has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)
因此,我正在考虑如何使用 REGEX 中的列以行方式替换这些元素。
sub并且gsub无法矢量化pattern(请参阅?gsub)。如果您正在寻找简单性和效率,请尝试stringi(或者stringr这是一个stringi包装器)
with(kat1, stringi::stri_replace_all_fixed(col1, col2, " "))
# [1] "A123 45" "66 55"
Run Code Online (Sandbox Code Playgroud)
使用基本 R,您可以使用 来完成(效率低下)apply,例如
apply(kat1, 1, function(x) sub(x[["col2"]], " ", x[["col1"]], fixed = TRUE))
# [1] "A123 45" "66 55"
Run Code Online (Sandbox Code Playgroud)
@docendo 的一个更好的基本 R 建议是mapply在向量上使用以避免矩阵转换
transform(kat1, col1 = mapply(sub, col2, " ", col1, fixed = TRUE))
# col1 col2
# 1 A123 45 Testz
# 2 66 55 Test2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
515 次 |
| 最近记录: |