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

时间:2017-04-29 04:28:01

标签: r stringr

我有一个数据帧列,其值为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 那样被替换。如果有人可以帮我解决这个问题。

2 个答案:

答案 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")
})