根据下面的数据,如何根据GEOID
列每一行中U
字母后面的值创建另一列?
数据:
id = c(1, 2, 3, 4, 5)
GEOID = c("1400000US42101000101", "1400000US42101000102", "1400000US42101000103",
"1400000US42101000104", "1400000US42101000105")
df = data.frame(id, GEOID)
预期输出:
id = c(1, 2, 3, 4, 5)
GEOID = c("1400000US42101000101", "1400000US42101000102", "1400000US42101000103",
"1400000US42101000104", "1400000US42101000105")
GEOID_Final = c("42101000101", "42101000102", "42101000103", "42101000104", "42101000105")
Desired_df = data.frame(id, GEOID, GEOID_Final)
代码:
library(stringr)
library(dplyr)
desired_df = df %>% word(?, sep = "US") # Stuck
2条答案
按热度按时间6yjfywim1#
我将使用正则表达式查找“US”和US之前的每个数字,并将它们从字符串中删除,只保留US之后的数字。
str_replace
接受一个字符串(或者在本例中,字符串向量GEOID),并将与pattern
匹配的内容替换为replacement
。我使用的模式是\d+US,意思是“匹配任何数字一次或多次,后跟US”。然后将其替换为nothing,只保留US后面的数字。您也可以将其匹配为.+US,意思是“匹配US之前的任何内容,以及US”。希望这有帮助!
nimxete22#
如果要使用word()
用
stringr::word
试试这个结果
单词(字符串=字符串_替换(地理标识符,模式=“美国”,替换=““),开始= 2,结束= 2)[1]“42101000101”“42101000102”“42101000103”“42101000104”“42101000105”
将其保存在第3列中或用于mutate:
结果