如何用R的dplyr检测列变量中的单词并生成新列?
在R中提取字符串下划线后的内容生成新列
原始数据
library(tidyverse) var = c("A_CAT","B_DOG","A_CAT","F_HORSE","GEORGE_DOG","HeLeN_CAT") df = tibble(var)
对应的数据框:
| var |
|---|
| A_CAT |
| B_DOG |
| A_CAT |
| F_HORSE |
| GEORGE_DOG |
| HeLeN_CAT |
目标结果
需要生成包含var_new列的数据框,提取每个var值中下划线后的部分:
| var | var_new |
|---|---|
| A_CAT | CAT |
| B_DOG | DOG |
| A_CAT | CAT |
| F_HORSE | HORSE |
| GEORGE_DOG | DOG |
| HeLeN_CAT | CAT |
解决方案
方法1:使用str_extract(tidyverse)
利用正则表达式匹配下划线后的所有字符,代码简洁高效:
df <- df %>% mutate(var_new = str_extract(var, "(?<=_).+"))
正则表达式(?<=_).+是正向预查,表示匹配所有跟在下划线后面的字符,无需考虑下划线前的内容长度。
方法2:使用separate(tidyverse)
将var列按下划线分割为两列,保留需要的部分:
df <- df %>% separate(var, into = c("prefix", "var_new"), sep = "_", remove = FALSE) %>% select(-prefix)
remove = FALSE:保留原始的var列- 最后通过
select(-prefix)删除不需要的前缀列
方法3:Base R 原生方法
用strsplit分割字符串后提取第二部分:
df$var_new <- sapply(strsplit(df$var, "_"), function(x) x[2])
strsplit将每个字符串拆分为列表,sapply遍历列表取出第二个元素。
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

