首页 > 解决方案 > 更改行中的字符串组合 df R

问题描述

我需要修改行中的某些值。这是我的df:

      name            ref
4     SCF(SAF1)-AAH1  16677311
5     SCF(SAF1)-AAH1  17517885
12     ND(RSP5)-ACK1  15955809
13     ND(RSP5)-ACK1  17551511
49     ND(RSP5)-ALG6  17551511
52     ND(RSP5)-ALR1  11279208

需要将第 12-13-49-52 行修改为

RSP5-ACK1, 
RSP5-ALG6

等等。所以我需要删除 ND 和 () 而不更改不以“ND”开头的行为 4-5。

标签: rstringdataframerows

解决方案


读入数据

dfr <- tibble::tribble(
        ~id,            ~name,    ~ref,
        4,     "SCF(SAF1)-AAH1",   "16677311",
        5 ,    "SCF(SAF1)-AAH1",   "17517885",
        12 ,    "ND(RSP5)-ACK1",   "15955809",
        13  ,   "ND(RSP5)-ACK1",   "17551511",
        49   ,  "ND(RSP5)-ALG6",   "17551511",
        52    , "ND(RSP5)-ALR1",   "11279208"
        )

这是执行此操作的一种方法:

dfr$name2 <- sub("ND\\(([^\\)]+?)\\)", "\\1", dfr$name, perl = TRUE)
dfr

结果:

# A tibble: 6 x 4
     id name           ref      name2         
  <dbl> <chr>          <chr>    <chr>         
1     4 SCF(SAF1)-AAH1 16677311 SCF(SAF1)-AAH1
2     5 SCF(SAF1)-AAH1 17517885 SCF(SAF1)-AAH1
3    12 ND(RSP5)-ACK1  15955809 RSP5-ACK1     
4    13 ND(RSP5)-ACK1  17551511 RSP5-ACK1     
5    49 ND(RSP5)-ALG6  17551511 RSP5-ALG6     
6    52 ND(RSP5)-ALR1  11279208 RSP5-ALR1   

您还可以使用该sub函数代替gsub,或稍微更改正则表达式,具体取决于您的ND(something)-XYZ值的混乱程度。


推荐阅读