R语言 将单词/字母表后面的值从一列提取到新列

bxjv4tth  于 2023-03-10  发布在  其他
关注(0)|答案(2)|浏览(156)

根据下面的数据,如何根据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
6yjfywim

6yjfywim1#

我将使用正则表达式查找“US”和US之前的每个数字,并将它们从字符串中删除,只保留US之后的数字。

library(stringr); library(dplyr)

id = c(1, 2, 3, 4, 5)
GEOID = c("1400000US42101000101", "1400000US42101000102", "1400000US42101000103",
          "1400000US42101000104", "1400000US42101000105")

df = data.frame(id, GEOID)

df %>%
  mutate(
    # replace every digit before US and US with empty string                       
    GEOID_final = str_replace(GEOID, pattern="\\d+US" , replacement ="")
  )
# id                GEOID GEOID_final
# 1  1 1400000US42101000101 42101000101
# 2  2 1400000US42101000102 42101000102
# 3  3 1400000US42101000103 42101000103
# 4  4 1400000US42101000104 42101000104
# 5  5 1400000US42101000105 42101000105

str_replace接受一个字符串(或者在本例中,字符串向量GEOID),并将与pattern匹配的内容替换为replacement。我使用的模式是\d+US,意思是“匹配任何数字一次或多次,后跟US”。然后将其替换为nothing,只保留US后面的数字。您也可以将其匹配为.+US,意思是“匹配US之前的任何内容,以及US”。
希望这有帮助!

nimxete2

nimxete22#

如果要使用word()

desired_df = df %>% word(?, sep = "US") # Stuck

stringr::word试试这个

word(string = str_replace(GEOID,pattern = 'US',replacement = " "),start = 2,end = 2)

结果
单词(字符串=字符串_替换(地理标识符,模式=“美国”,替换=““),开始= 2,结束= 2)[1]“42101000101”“42101000102”“42101000103”“42101000104”“42101000105”
将其保存在第3列中或用于mutate:

df%>%mutate(
GEOID_Final =  word(string = str_replace(GEOID,pattern = 'US',replacement = " "),start = 2,end = 2)
  )

结果

id                GEOID GEOID_Final
1  1 1400000US42101000101 42101000101
2  2 1400000US42101000102 42101000102
3  3 1400000US42101000103 42101000103
4  4 1400000US42101000104 42101000104
5  5 1400000US42101000105 42101000105

相关问题