提问人:Antonio 提问时间:9/9/2023 更新时间:10/4/2023 访问量:47
如何在 R 中获取列中段之后的每个字符?
How do I get every character after a segment in my column in R?
问:
Fake City, TX Court House
我想返回:Court House
这是我从另一篇文章中得到的。我用它来提取城市部分。
gsub(",.*$", "", COLUMN$Entity)
我的直觉告诉我,“,.*$ 将不得不改变,但我不确定该把它改成什么。
我是正则表达式的新手。谢谢你们,伙计们。
答:
1赞
jkatam
9/9/2023
#1
请尝试
# Input string
input_string <- 'Fake City, TX Court House'
# Use regular expression to extract 'Court House'
extracted_text <- gsub('.*\\,\\s\\w+\\s', '', input_string)
[1] "Court House"
1赞
LMc
9/9/2023
#2
x <- c("Fake City, TX Court House", "Fake City, TX")
sub(".*\\b[A-Z]{2}\\b\\s?", "", x)
# [1] "Court House" ""
R 具有状态缩写的内置字符向量。我们可以用它来构造一个正则表达式,以拆分状态缩写上的字符串,并在它之后取所有内容。
library(stringr)
x <- c("Fake City, TX Court House",
"Fake City, OK Court House",
"Fake City, PA",
"CArlsbad, CA Court House")
str_split_i(x, str_c("\\b", state.abb, "\\b\\s", collapse = "|"), 2)
# [1] "Court House" "Court House" NA "Court House"
这就是正则表达式的样子(“匹配单词'AL'后跟空格或单词'AK'后跟空格...”):
str_c("\\b", state.abb, "\\b\\s", collapse = "|")
"\\bAL\\b\\s|\\bAK\\b\\s|\\bAZ\\b\\s|\\bAR\\b\\s|\\bCA\\b\\s|\\bCO\\b\\s|\\bCT\\b\\s|\\bDE\\b\\s|\\bFL\\b\\s|\\bGA\\b\\s|\\bHI\\b\\s|\\bID\\b\\s|\\bIL\\b\\s|\\bIN\\b\\s|\\bIA\\b\\s|\\bKS\\b\\s|\\bKY\\b\\s|\\bLA\\b\\s|\\bME\\b\\s|\\bMD\\b\\s|\\bMA\\b\\s|\\bMI\\b\\s|\\bMN\\b\\s|\\bMS\\b\\s|\\bMO\\b\\s|\\bMT\\b\\s|\\bNE\\b\\s|\\bNV\\b\\s|\\bNH\\b\\s|\\bNJ\\b\\s|\\bNM\\b\\s|\\bNY\\b\\s|\\bNC\\b\\s|\\bND\\b\\s|\\bOH\\b\\s|\\bOK\\b\\s|\\bOR\\b\\s|\\bPA\\b\\s|\\bRI\\b\\s|\\bSC\\b\\s|\\bSD\\b\\s|\\bTN\\b\\s|\\bTX\\b\\s|\\bUT\\b\\s|\\bVT\\b\\s|\\bVA\\b\\s|\\bWA\\b\\s|\\bWV\\b\\s|\\bWI\\b\\s|\\bWY\\b\\"
使用单词边界可防止状态缩写与字符串的其他部分匹配(例如 CArlsbad 中的“CA”)。\\b
如果 TX 是您唯一关心的分隔符,那么可以简化:
str_split_i("Fake City, TX Court House", "TX ", 2)
可比较的基础 R 解决方案:
sapply(strsplit("Fake City, TX Court House", "TX "), `[`, 2)
0赞
Umar
10/4/2023
#3
这是怎么回事
text <- "Fake City, TX Court House"
# Use regular expression to extract "Court House"
result <- sub(".*, TX (.*)", "\\1", text)
# Print the result
print(result)
"Court House"
评论
TX
, [A-Z]{2}
gsub("^.*, [A-Z]{2} ", "", COLUMN$Entity)