我有一个数据帧列,其值为Americ0,Indi0,Data 2.0 ...... 在进行数据清理时,我应该更换" 0" " an"
df$column <- lapply(df$column, function(x){
str_replace(x,"0","an")
})
我正在使用上面的代码将 0 替换为&#34;&#34;这是按预期工作的。现在的问题是df $列中有一些值不能像值 Data 2.0 那样被替换。如果有人可以帮我解决这个问题。
答案 0 :(得分:0)
你可以从str_replace
开始stringr
,假设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:]字母字符:[:lower:]和[:upper:]。
有关详情,您可以在控制台上搜索?regex
答案 1 :(得分:0)
我不确定如果没有你希望/不希望替换的某种规则你会怎么做,如果0在开头,或者如果0发生,可能不会替换在这组字符串中。
使用您当前的设置,您可能会做这样的事情(假设只有&#34; Data 2.0&#34;是您要跳过的东西)
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")
})