R:如何仅替换数据框列中的特定字符串

R: How to replace only particular strings in a dataframe column

我有一个数据框列,其值类似于 Americ0、Indi0、Data 2.0... 在进行数据清理时,我应该用 "an"

替换“0”
df$column <- lapply(df$column, function(x){
  str_replace(x,"0","an")

})

我正在使用上面的代码将 0 替换为 "an",这是按预期工作的。现在的问题是 df$column 中有某些值不能像值 Data 2.0 那样被替换。如果有人能帮助我,我将不胜感激。

您可以从 stringr 执行 str_replace,假设 x 是 df$column:

library(stringr)
x <- c("Americ0","Indi0","Data 2.0")
str_replace(x,"([:alpha:]+)(0)","\1an")

或者,使用 baseR

gsub("([[:alpha:]]+)(0)","\1an",x)

输出:

> str_replace(x,"([:alpha:]+)(0)","\1an")
[1] "American" "Indian"   "Data 2.0"


> gsub("([[:alpha:]]+)(0)","\1an",x)
[1] "American" "Indian"   "Data 2.0"

括号内被捕获的项目称为捕获组,所以我将所有超过一个的字母捕获到捕获组1中,因此在这种情况下2.0不会被选中。

来自文档:

[:alpha:] Alphabetic characters: [:lower:] and [:upper:].

有关更多信息,您可以在控制台上搜索 ?regex

如果没有某种你不想替换的规则,我不确定你会怎么做在这组字符串中。

根据您当前的设置,您可能会做这样的事情(假设您只想跳过 "Data 2.0")

df <- as.data.frame(c("Americ0","Indi0","Data 2.0"))
colnames(df)[1] = "column"

do_not_replace <- c("Data 2.0")

df$column <- lapply(df$column, function(x) {
  if(x %in% do_not_replace) {
    x
  } else str_replace(x, "0", "an")
})