如何在R语言中从字符串列提取国家代码生成新列?
提取目标国家代码到独立列
针对你的数据框,可通过正则匹配提取to-和from-后的两位国家代码,以下是两种简洁的实现方式:
方法1:用stringr精准提取
借助str_extract配合正则表达式,分别定位to-后、-from前的目标内容,以及from-后、/summary前的内容:
library(stringr) library(dplyr) df_processed <- df %>% mutate( To_Country = str_extract(Page, "(?<=to-)\\w+(?=-from)"), From_Country = str_extract(Page, "(?<=from-)\\w+(?=/summary)") )
方法2:用tidyr拆分字符串
利用separate_wider_regex按照固定字符串模式拆分Page列,一次性提取两个国家代码:
library(tidyr) library(dplyr) df_processed <- df %>% separate_wider_regex( Page, patterns = c( prefix = ".+/to-", To_Country = "\\w+", middle = "-from-", From_Country = "\\w+", suffix = "/summary" ), remove = FALSE # 保留原Page列,无需保留可设为TRUE ) %>% select(-prefix, -middle, -suffix) # 移除拆分产生的临时列
处理后结果
运行上述任一代码后,数据框会新增To_Country和From_Country列,示例输出如下:
df_processed #> # A tibble: 10 × 4 #> Page Count To_Country From_Country #> <chr> <dbl> <chr> <chr> #> 1 /es/import-340600-to-mx-from-de/summary 153 mx de #> 2 /es/import-340600-to-de-from-mx/summary 78 de mx #> 3 /es/import-071320-to-sv-from-cr/summary 72 sv cr #> 4 /en/import-340111-to-ru-from-ir/summary 58 ru ir #> 5 /en/import-870423-to-hk-from-de/summary 57 hk de #> 6 /es/import-392049-to-mx-from-de/summary 55 mx de #> 7 /es/import-080440-to-mx-from-es/summary 48 mx es #> 8 /es/import-340600-to-mx-from-jp/summary 46 mx jp #> 9 /en/import-852691-to-tr-from-ua/summary 42 tr ua #> 10 /es/import-180620-to-mx-from-us/summary 42 mx us
内容的提问来源于stack exchange,提问作者John Owen
相关产品推荐
相关产品推荐

