加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

regex – 在R中,使用正则表达式匹配多个模式并添加新列到列表

发布时间:2020-12-14 05:49:04 所属栏目:百科 来源:网络整理
导读:我已经找到了很多关于如何使用一个模式和一个替换来匹配和更新整个列表的示例,但我现在正在寻找的是在单个语句或循环中为多个模式和多个替换执行此操作的方法. 例: print(recs) phonenumber amount1 5345091 2002 5386052 2003 5413949 6004 7420155 7005 7
我已经找到了很多关于如何使用一个模式和一个替换来匹配和更新整个列表的示例,但我现在正在寻找的是在单个语句或循环中为多个模式和多个替换执行此操作的方法.

例:

> print(recs)
  phonenumber amount
1     5345091    200
2     5386052    200
3     5413949    600
4     7420155    700
5     7992284    600

我想插入一个名为’service_provider’的新列,其中/ ^ 5 /为Company1,/ ^ 7 /为Company2.

我可以使用以下两行R来做到这一点:

recs$service_provider[grepl("^5",recs$phonenumber)]<-"Company1"
recs$service_provider[grepl("^7",recs$phonenumber)]<-"Company2"

然后我得到:

phonenumber amount service_provider
1     5345091    200          Company1
2     5386052    200          Company1
3     5413949    600          Company1
4     7420155    700          Company2
5     7992284    600          Company2

我想提供一个列表,而不是一组离散的grepl,因此更容易将国家特定信息保存在一个地方,而所有编程逻辑保存在另一个地方.

thisPhoneCompanies<-list(c('^5','Company1'),c('^7','Company2'))

在其他语言中,我会在电话公司列表中使用for循环

For every row in thisPhoneCompanies
    Add service provider to matched entries in recs (such as the grepl statement)
end loop

但我明白这不是在R中做到这一点的方法.

解决方法

使用stringi:

library(stringi)
recs$service_provider <- stri_replace_all_regex(str = recs$phonenumber,pattern = c('^5.*','^7.*'),replacement = c('Company1','Company2'),vectorize_all = FALSE)

recs
#   phonenumber amount service_provider
# 1     5345091    200         Company1
# 2     5386052    200         Company1
# 3     5413949    600         Company1
# 4     7420155    700         Company2
# 5     7992284    600         Company2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读