如何替换R中数据帧中的部分字符串?

时间:2018-05-24 18:36:33

标签: r gsub stringr

我有一个数据框,其中一行名为" Country"。当原产国是美国时,条目被列为"路易斯安那州 - 美国",例如。我试图摆脱" - 美国"最后,它只会说出它来自哪个州。

所以,我现在有类似的东西(虽然我的成千上万条):

df <- data.frame(ID = 1:4, Country = c("Louisiana - USA", "Canada","France", "Maine - USA"))

我尝试了以下内容:

for (i in 1:nrow(df)) {
    df$USA[i] <- ifelse(grepl(" USA| États-Unis", df$Country[i]), 1, 0) 
}

index_USA <- which(df$USA == 1)

for (int in index_USA) {
    gsub(" - USA", "", df$Country[int])
}

但是,此代码无效。 我也尝试使用stringr包而不是gsub。所以,我用:

替换了最后一个for循环
for (int in index_USA) {
    str_replace_all(df$Country[int], " - USA", "")
}

但这也不起作用。我觉得我犯了一个明显的错误,但我无法弄明白(也许我需要使用正则表达式?)

2 个答案:

答案 0 :(得分:1)

您想要删除字符串末尾的" USA"" États-Unis"。所以,你需要

df$Country <- sub("\\s+(?:USA|États-Unis)$", "", df$Country)

<强>详情

  • \\s+ - 一个或多个空白字符
  • (?: - 启动(非捕获)分组构造,匹配以下两种选择之一:
    • USA - USA substring
    • | - 或
    • États-Unis - États-Unis substring
  • ) - 分组结束
  • $ - 字符串结束。

答案 1 :(得分:0)

您可以尝试以下代码:

df$Country <- sub(" - USA","",df$Country)
df
#Or if you want to you use package stringr
df$Country <- str_replace_all(df$Country," - USA","")
df