【发布时间】: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")。