【问题标题】:How to remove a word or two at the end of string in a dataframe in R?如何在 R 中的数据框中删除字符串末尾的一两个单词?
【发布时间】:2018-05-24 18:36:32
【问题描述】:

我有一个名为“Country”的行的数据框。例如,当原产国是美国时,条目被列为“路易斯安那州 - 美国”。我试图在最后去掉“- USA”,这样它只会说它来自哪个州。

所以,我目前有这样的东西(尽管我的条目有数千个):

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", "")
}

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

【问题讨论】:

  • df$Country &lt;- gsub(" - USA","",df$Country)

标签: r gsub stringr


【解决方案1】:

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

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

详情

  • \\s+ - 1 个或多个空格字符
  • (?: - (非捕获)分组结构的开始,匹配两个备选方案之一:
    • USA - USA 子字符串
    • | - 或
    • États-Unis - États-Unis 子字符串
  • ) - 分组结束
  • $ - 字符串结束。

【讨论】:

    【解决方案2】:

    你可以试试这些代码:

    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
    

    【讨论】:

      猜你喜欢
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 2011-06-22
      • 1970-01-01
      • 2020-01-01
      • 2017-09-18
      相关资源
      最近更新 更多