【问题标题】:R: Modifying a REGEX ExpressionR:修改正则表达式
【发布时间】:2022-11-19 02:35:53
【问题描述】:

我有以下数据集:

id = 1:5
col1 = c("john", "henry", "adam", "jenna", "peter")
col2 = c("river B8C 9L4", "Field U9H 5E2 PP", "NA", "ocean A1B 5H1 dd", "dave")
col3 = c("matt", "steve", "forest K0Y 1U9 hu2", "NA", "NA")
col4 = c("Phone: 111 1111 111", "Phone: 222 2222", "Phone: 333 333 1113", "Phone: 444 111 1153", "Phone: 111 111 1121")
my_data = data.frame(id, col1, col2, col3, col4)

id  col1             col2               col3                col4
1  1  john    river B8C 9L4               matt Phone: 111 1111 111
2  2 henry Field U9H 5E2 PP              steve     Phone: 222 2222
3  3  adam               NA forest K0Y 1U9 hu2 Phone: 333 333 1113
4  4 jenna ocean A1B 5H1 dd                 NA Phone: 444 111 1153
5  5 peter             dave                 NA Phone: 111 111 1121

我发现这个识别以下模式的 REGEX 代码 - 然后可以将其包装到一个函数中:

 apply(my_data, 1, function(x) gsub('(([A-Z] ?[0-9]){3})|.', '\\1', toString(x)))

[1] "B8C 9L4" "U9H 5E2" "K0Y 1U9" "A1B 5H1" ""   

完成此操作后,是否有任何方法可以扩展此代码,以便

  • 一旦识别出具有 REGEX 条件的行/列,就提取该行/列的全部内容?

例如这个,然后看起来像这样:

[1] "river B8C 9L4 " Field U9H 5E2 PP"  "forest K0Y 1U9 hu2"  "ocean A1B 5H1 dd"  

【问题讨论】:

    标签: r data-manipulation


    【解决方案1】:

    尝试

    library(stringr)
    na.omit(apply(my_data[-1], 1, (x) 
        x[str_count(x[x != "NA"], "\w+") > 1 & 
         !str_detect(x[x != "NA"], "Phone")][1]))
    

    -输出

    [1] "river B8C 9L4"    "Field U9H 5E2 PP" "NA"   
    [3] "ocean A1B 5H1 dd"
    

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 2018-09-14
      相关资源
      最近更新 更多