如何从R语言数据框的GEOID列提取字母U后的内容生成新列?
在R语言中提取GEOID列中字母U后的数值并创建新列
针对你的需求,这里提供几种高效的实现方法,都能得到你想要的结果:
方法1:修正你已有的word()函数写法
你已经用到了stringr和dplyr,只需要明确word()函数的参数即可:
library(stringr) library(dplyr) desired_df <- df %>% mutate(GEOID_Final = word(GEOID, 2, sep = fixed("US")))
word(GEOID, 2, sep = fixed("US"))表示将GEOID列的字符串按固定分隔符"US"拆分,取拆分后的第2个部分,也就是US之后的数值内容。
方法2:使用str_split_fixed()拆分字符串
这种方法更直观地将字符串拆分为固定数量的部分:
library(stringr) library(dplyr) desired_df <- df %>% mutate(GEOID_Final = str_split_fixed(GEOID, "US", n = 2)[, 2])
str_split_fixed()会将每个字符串拆分成2列,[,2]用来提取拆分后的第二列内容。
方法3:使用str_extract()正则匹配
通过正则表达式的正向预查,直接提取US之后的所有字符:
library(stringr) library(dplyr) desired_df <- df %>% mutate(GEOID_Final = str_extract(GEOID, "(?<=US).*"))
(?<=US)是正向预查,代表匹配US之后的位置,.*表示匹配后续所有字符。
方法4:Base R原生方法(无需额外包)
如果不想加载第三方包,直接用Base R的sub()函数即可:
df$GEOID_Final <- sub(".*US", "", df$GEOID) desired_df <- df
sub(".*US", "", df$GEOID)表示将每个字符串中US及之前的所有内容替换为空,剩下的就是目标数值。
以上所有方法运行后,得到的desired_df都和你给出的期望输出完全一致。
内容的提问来源于stack exchange,提问作者Ed_Gravy
相关产品推荐
相关产品推荐

