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")
})
我有一个数据框列,其值类似于 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")
})