【问题标题】:Simplify R code for detection and replacement of value names [duplicate]简化用于检测和替换值名称的 R 代码 [重复]
【发布时间】:2023-02-09 17:44:54
【问题描述】:

我有一个大数据集。 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)

【问题讨论】:

  • 你可以这样做:readr::parse_number(df$ID)

标签: r tidyverse


【解决方案1】:

一种方法是使用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-02-09

来自 OP 的数据

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

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 2019-04-07
    • 1970-01-01
    • 2013-01-13
    • 2018-11-05
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多