library(stringr)
分隔符以“\,”代替“\”,假设字符串在逗号后有一个空格(USA 之前的前导空格)。
state_name <- ifelse(word(states,2,sep = "\\, ")=="USA", word(states,1,sep = "\\,"),
word(states,2,sep = "\\, "))
当 USA 之前没有空格时,上面的代码将不可靠。在这种情况下,它将打印“USA”。下面给出的代码将工作,当有空格和没有空格的字符串混合时。
state_name <- ifelse(word(states, -1) =="USA", word(states,1,sep = "\\,"),
word(states,2,sep = "\\, "))
请注意,考虑到前导空格,第三个函数的分隔符仍然是“\,”。您也可以将其设置为“\”,稍后从输出中删除空格。
state_name <- ifelse(word(states, -1) =="USA", word(states,1,sep = "\\,"),
word(states,2,sep = "\\,"))
state_name <- trimws(state_name, which = "l")
state_name
#[1] "Masassachusetts" "NY" "MI" "California" "Idaho" "FL"
编辑:
要回答评论中关于有 NA 的问题,当数据集如下:
states <- c("Masassachusetts, USA", "SUNNY Buffalo"
"Buffalo, NY", "Flint, MI","California, USA",
"Idaho, USA", "Orlando, FL", "Shanghai, China")
在这种情况下,我的建议是列出各州的名称及其缩写(附在答案末尾)。
%in% 可用于确认字符串是否为州名。
library(dplyr)
state_name <- ifelse(word(states, -1) =="USA", word(states,1,sep = "\\,"),
ifelse(word(states, 2, sep = "\\, ") %in% stl,
word(states, 2, sep = "\\, "), NA))
state_name
#[1] "Masassachusetts" NA "NY" "MI" "California" "Idaho"
#[7] "FL" NA
州名及其缩写列表:
stl <- c("Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado",
"Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho",
"Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana",
"Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota",
"Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire",
"New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota",
"Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island",
"South Carolina", "South Dakota", "Tennessee", "Texas", "Utah",
"Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin",
"Wyoming", "AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "FL",
"GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD",
"MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM",
"NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN",
"TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY")