r - 带有 c(pattern1 = replacement1) 选项的 stringr::str_replace_all 的基本 R 替代方案
问题描述
这个问题stringr::str_replace_all
可能在有该选项(或众所周知)之前正在寻求类似的答案。我在下面复制我的答案的要点,使用str_replace_all
.
tr <- c("whatevs_1", "something_52", "whatevs_1something_52")
tr
#> [1] "whatevs_1" "something_52" "whatevs_1something_52"
patterns <- sprintf('_%s$', c('1','14','22','50','52','57','76','1018','2001','3301','6005'))
replacements <- sprintf('_%s' , c('R','I', 'P', 'O', 'C', 'D', 'M', 'L', 'S', 'K', 'G'))
names(replacements) <- patterns
stringr::str_replace_all(tr, replacements)
#> [1] "whatevs_R" "something_C" "whatevs_1something_C"
您将如何在基础 R 中实现上述目标?
提供的最佳选择是 for 循环。只是想知道是否有人在此期间想到了更好的选择。
解决方案
我们可以使用带有from的for
循环,因为参数不是矢量化的,即gsub
base R
?gsub
pattern - 如果提供长度为 2 或更大的字符向量,则使用第一个元素并发出警告。除 regexpr、gregexpr 和 regexec 外,允许缺少值。
替换 - 如果提供长度为 2 或更大的字符向量,则使用第一个元素并发出警告。如果为 NA,则结果中与匹配项对应的所有元素都将设置为 NA。
因此,for
具有递归赋值的循环可能是更好的选择
for(i in seq_along(patterns)) tr <- gsub(patterns[i], replacements[i], tr)
tr
#[1] "whatevs_R" "something_C" "whatevs_1something_C"
推荐阅读
- java - 如何从活动中启动特定的 tablayout 片段
- ios - react-navigation-fluid-transitions 共享图像闪烁
- python - PyQt5 TableView 杀死内核
- ios - firebase 身份验证 ios 使用未解析的标识符“句柄”
- python - 根据某些列名对来自不同数据框的列求和
- sql - 如何使用 Postgres SQL 获取具有单个总计行的同一列的不同值的计数?
- javascript - ECMASscript 第 5 版中添加了方法,为什么要进行条件检查?
- android - 在工具栏上添加汉堡图标时应用程序崩溃
- java - org.springframework.http.converter.HttpMessageNotWritableException:在科尔达
- xml - 将字符串附加到变量并将其存储在 XSLT 中的同一变量中