【发布时间】:2018-10-12 19:56:56
【问题描述】:
我有一个由
给出的示例数据集df <- data.frame(
country = c("GermanyBerlin", "England (UK)London", "SpainMadrid", "United States of AmericaWashington DC", "HaitiPort-au-Prince", "country66city"),
capital = c("#Berlin", "NA", "#Madrid", "NA", "NA", "NA"),
url = c("/country/germany/01", "/country/england-uk/02", "/country/spain/03", "country/united-states-of-america/04", "country/haiti/05", "country/country6/06"),
stringsAsFactors = FALSE
)
country capital url
1 GermanyBerlin #Berlin /country/germany/01
2 England (UK)London NA /country/england-uk/02
3 SpainMadrid #Madrid /country/spain/03
4 United States of AmericaWashington DC NA country/united-states-of-america/04
5 HaitiPort-au-Prince NA country/haiti/05
6 country66city NA country/country6/06
我们的目的是整理这些列,使列与人们对它们的名称所期望的一样:
- 第一个应该只包含国家名称。
- 第二个应该包含大写字母(不带 # 符号)。
- 第三个应该保持不变。
所以我想要的输出是:
country capital url
1 Germany Berlin /country/germany/01
2 England (UK) London /country/england-uk/02
3 Spain Madrid /country/spain/03
4 United States of America Washington DC country/united-states-of-america/04
5 Haiti Port-au-Prince country/haiti/05
6 country6 6city country/country6/06
如果capital 列中有非 NA 条目,我有一段代码可以实现这一点(见帖子底部)。
因此,我正在寻找一种解决方案,该解决方案可以识别url 列的模式可用于将大写从country 列中拆分出来。
这需要考虑到这样一个事实
- URL 文本全部小写,而出现在
country列中的国家/地区名称大小写混合。 - URL 中的文本用连字符替换空格。
- url 删除了特殊字符(例如 UK 周围的括号)。
我很想看看这个目标是如何实现的,大概是使用正则表达式(尽管可以选择任何选项)。
capital 列非 NA 时的部分解决方案
如果capital 列中有非 NA 条目,则以下代码实现了我的目标:
df %>% mutate( capital = str_replace(capital, "#", ""),
country = str_replace(country, capital,"")
)
country capital url
1 Germany Berlin /country/germany/01
2 England (UK)London NA /country/england-uk/02
3 Spain Madrid /country/spain/03
4 United States of AmericaWashington DC NA country/united-states-of-america/04
【问题讨论】:
标签: r regex split pattern-matching