【问题标题】:Use gsub to replace string within specific columns使用 gsub 替换特定列中的字符串
【发布时间】:2020-07-02 23:46:30
【问题描述】:

我有这样的数据:

data_in <- read_table2("V1  v2  V3  V4  V5  V6  U1
3   8   30  60  9   30  ertr
0   0   0   50  9   50  rt
10  15  60min   50% 8   45  yt
0           5   32  250 yt
0   0   0   5   36  225 ertr
0           33  20  120 rt
100%    12  100 30  15  50  yt
0   0   0   25  18  25  yt
0           1   2   45  ertr
1   2   45% 1   36  30  min
            1   36  50  yt
0           1   10  45  yt
            1   36  60  ertr
0   0   0   100 16  100 rt
")

我想用空格替换 V1:V6 列的“%”和“min”。

我有这样的代码,但它没有做我想要的。我想我不太明白如何执行新的“跨越”功能。

data_in %>% mutate(across(starts_with("V"),~gsub("%|min","")))

任何建议表示赞赏!

【问题讨论】:

  • 还有一些字符串“ertr”、“yt”。你也想摆脱它吗?
  • 不,它们属于 U1 列,所以我希望那些保持不变,即使该列中的“min”也应该保留。我只想更改以 V 开头的列。@akrun

标签: r dplyr gsub


【解决方案1】:

gsub 命令中,我们需要x

x - 寻找匹配的字符向量,或者可以被 as.character 强制转换为字符向量的对象。

根据用途

gsub(模式, 替换, x, ignore.case = FALSE, perl = FALSE, 固定 = FALSE,useBytes = FALSE)

acrossmutate_at 中,有匿名函数(function(x)~,如果我们使用后者,'x' 将是..x

library(dplyr)
data_in2 <- data_in %>%
          mutate(across(starts_with("V"),~ gsub("%|min","", .)))

或者没有匿名函数我们可以指定参数

data_in %>%
       mutate(across(starts_with("V"), gsub, pattern = "%|min", replacement = ""))

或使用str_remove

library(stringr)
data_in %>%
      mutate(across(starts_with("V"), str_remove_all, pattern = "%|min"))

【讨论】:

    【解决方案2】:

    你也可以试试:

    data_in <- as.data.frame(apply(data_in, 2, function(x) gsub('%'," ",x)))
    data_in <- as.data.frame(apply(data_in, 2, function(x) gsub('min'," ",x)))
    
         V1 v2  V3   V4   V5   V6   U1
    1     3  8  30   60    9   30 ertr
    2     0  0   0   50    9   50   rt
    3    10 15 60   50     8   45   yt
    4     0  5  32  250   yt <NA> <NA>
    5     0  0   0    5   36  225 ertr
    6     0 33  20  120   rt <NA> <NA>
    7  100  12 100   30   15   50   yt
    8     0  0   0   25   18   25   yt
    9     0  1   2   45 ertr <NA> <NA>
    10    1  2 45     1   36   30     
    11    1 36  50   yt <NA> <NA> <NA>
    12    0  1  10   45   yt <NA> <NA>
    13    1 36  60 ertr <NA> <NA> <NA>
    14    0  0   0  100   16  100   rt
    

    【讨论】:

      猜你喜欢
      • 2013-09-05
      • 2021-10-30
      • 2013-08-17
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多