简化R代码以检测和替换值名称[重复]

46qrfjad  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(361)
    • 此问题在此处已有答案**:

Extracting numbers from vectors of strings(12个答案)
4天前关闭。
我有一个很大的数据集。ID列包含了很长很复杂的名称,我想用更简单的名称来替换这些值名称。它们的名称中都包含了一个连续的数字,所以我想用这个简单的数字来替换长值名称。但由于我有很多值名称要替换,当我为每个值写一行代码时,我得到了一段很长的代码。我正在寻找一种方法,用一个循环来减少这段代码,或者更好:以一种整齐的方式,这样我就不必写所有这些行,其中唯一不同的是连续的数字
下面是一些伪数据和我的管道替换值名称的简短版本:

library(tidyverse)
ID <- c('number04', 'number05', 'number06', 'number07', 'number08', 'number09', 'number10')
df <- tibble(ID)

df <- df |>
 mutate(ID = if_else(str_detect(ID, pattern = "04"), "04", ID) |>
 mutate(ID = if_else(str_detect(ID, pattern = "05"), "05", ID) |>
 mutate(ID = if_else(str_detect(ID, pattern = "06"), "06", ID) |>
 mutate(ID = if_else(str_detect(ID, pattern = "07"), "07", ID) |>
 mutate(ID = if_else(str_detect(ID, pattern = "08"), "08", ID) |>
 mutate(ID = if_else(str_detect(ID, pattern = "09"), "09", ID) |>
 mutate(ID = if_else(str_detect(ID, pattern = "10"), "10", ID)
c9x0cxw0

c9x0cxw01#

一种方法是使用sub()

library(tidyverse)
 
df |>
  mutate(ID = sub("^number", "", ID))
#> # A tibble: 7 x 1
#>   ID   
#>   <chr>
#> 1 04   
#> 2 05   
#> 3 06   
#> 4 07   
#> 5 08   
#> 6 09   
#> 7 10

reprex package(v2.0.1)于2023年2月9日创建
数据来自OP

ID <- c('number04', 'number05', 'number06', 'number07', 'number08', 'number09', 'number10')
df <- tibble(ID)

相关问题