如何在R中使用for循环提取多个子字符串

Posted

技术标签:

【中文标题】如何在R中使用for循环提取多个子字符串【英文标题】:How to extract several substrings with a foor loop in R 【发布时间】:2022-01-07 23:34:12 【问题描述】:

我有以下 100 个字符串:

 [3] "Department_Complementary_Demand_Converted_Sum" 
 [4] "Department_Home_Demand_Converted_Sum"                   
 [5] "Department_Store A_Demand_Converted_Sum"                
 [6] "Department_Store B_Demand_Converted_Sum"
 ...                
 [100] "Department_Unisex_Demand_Converted_Sum"  

显然,我可以为每个字符串使用substr(),并为字符串索引提供不同的开始和结束值。但是可以看到,所有的字符串都以Department_ 开头并以_Demand_Converted_Sum 结尾。我只想提取介于两者之间的内容。如果有办法始终从左侧的索引 11 开始并在左侧的索引 21 结束,那么我可以对上面的所有 100 个字符串运行一个 for 循环。

示例

给定输入: Department_Unisex_Demand_Converted_Sum

预期输出: Unisex

【问题讨论】:

你能根据所显示的预期输入显示预期的输出吗? @sindri_baldur - 当然。请检查我的编辑。 gsub("^Department_|_Demand_Converted_Sum$", "", string)stringr::str_sub(string, 12, -22) @RitchieSacramento - 太棒了,谢谢! 【参考方案1】:

使用strsplit()

sapply(strsplit(string, '_'), '[', 2)
# [1] "Complementary" "Home"          "Store A"   

stringi::stri_sub_all()

unlist(stringi::stri_sub_all(str, 12, -22))
# [1] "Complementary" "Home"          "Store A"      

【讨论】:

【参考方案2】:

看起来像一个经典的环视案例:

library(stringr)
str_extract(str, "(?<=Department_)[^_]+(?=_)")
[1] "Complementary" "Home"          "Store A" 

数据:

str <- c("Department_Complementary_Demand_Converted_Sum",
         "Department_Home_Demand_Converted_Sum",
         "Department_Store A_Demand_Converted_Sum")

【讨论】:

以上是关于如何在R中使用for循环提取多个子字符串的主要内容,如果未能解决你的问题,请参考以下文章

[在python中使用正则表达式搜索字符串子字符串

如何在批处理文件中的for循环中使用可变长度的子字符串?

PB中取字符串子串的函数是啥

PB中取字符串子串的函数是啥

R:使用 for 循环将因子的级别部分匹配到字符串? [复制]

如何更改python字符串子字符串信息