【问题标题】:replace some character values using tidyverse使用 tidyverse 替换一些字符值
【发布时间】:2020-11-11 09:23:29
【问题描述】:

我有一个数据框,其中有一列如下所示,我想使用tidyr::separate 将其拆分为 3 列。问题是某些行中的第一段由两部分组成(例如 Troms-Romsa)

dummy data:
               df <- data.frame(
                 stringsAsFactors = FALSE,
                 fka = c(
                   "Troms-Romsa - Female - 65+",
                   "Aust-Agder - Female - 20-29",
                   "Aust-Agder - Man - 50-64",
                   "Troms-Romsa - Man - 65+",
                   "Bergen - Man - 65+",
                   "Bergen - Female - 65+",
                   "Aust-Agder - Female - 30-39")) 

这里是头:

                          fka
1  Troms-Romsa - Female - 65+
2 Aust-Agder - Female - 20-29
3    Aust-Agder - Man - 50-64
4     Troms-Romsa - Man - 65+
5          Bergen - Man - 65+
6       Bergen - Female - 65+
7 Aust-Agder - Female - 30-39 

我尝试用dplyr::across 替换/重命名它们,如下所示,但我做不到。

df %>% 
  mutate(across(.fns = ~replace(., . ==  "Aust-Agder" , "AustAgder"))) 

如何解决这个问题?我的目标是在最后将 fka col 转换为 3 cols:

... %>%
separate(fka, c('county_name' , 'gender' , 'age_group'), sep="-" , extra = "merge")

【问题讨论】:

  • 如果您使用" - "而不是"-"作为分隔符,您的分隔符似乎是一个空格加破折号和另一个空格,可以解决您的问题。
  • @Koray 两个县在原始名称中也有“ - ”(空格加破折号和另一个空格),因为我试图重命名。像这样在 ´´´Finnmark - Finnmárku - 女性 - 50-64```
  • 然后一个解决方案可能是使用带有简单正则表达式技巧的分隔符,例如" - Man - | - Female - " 然后这将为您提供第一列和第三列,无论它们包含什么。对于第二列,我只会做mutate(sex=if_else(str_detect(fka,"Man"),"Man","Female")

标签: r dplyr tidyverse


【解决方案1】:

尝试反转 data.frame 中行的元素,以便有问题的元素是行中的最后一个,如下所示:

df <- data.frame(
  stringsAsFactors = FALSE,
  fka = c(
    "Troms-Romsa - Female - 65+",
    "Aust-Agder - Female - 20-29",
    "Aust-Agder - Man - 50-64",
    "Troms-Romsa - Man - 65+",
    "Bergen - Man - 65+",
    "Bergen - Female - 65+",
    "Aust-Agder - Female - 30-39",
    "Finnmark - Finnmárku - Female - 50-64")) 

df$fka = (sapply(strsplit(x = df$fka, split = " - "), function(x) paste(rev(x), collapse = "_")))
df %>% separate(fka, c('age_group', 'gender',  'county_name'), sep="_" , extra = "merge")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多