基于grep的数据值替换R

时间:2014-02-28 16:45:50

标签: r grep

我有一个数据框。其中一列的值如下:

  

WIND
  WINDS
  HIGH WIND
  等

其他值。现在我想用“WIND”重命名其中包含“WIND”变量的每个值。我知道如何找到我需要替换的值:

grep("WIND", df$col1)

但不是如何替换这些值。感谢。

2 个答案:

答案 0 :(得分:5)

您可以使用grepl和replace

为这些值的原始列进行子集化
df$col1[grepl("WIND",df$col1)]<-"WIND"

答案 1 :(得分:1)

更新:有点像脑筋,agrep实际上并没有在grep上添加任何内容,但您只需将agrep替换为grep 。如果你的某些单词的根目录略有不同但仍想匹配,那就可以了。

以下是使用agrep的方法:

> wind.vec
[1] "WINDS"      "HIGH WIND"  "WINDY"      "VERY WINDY"
> wind.vec[agrep("WIND", wind.vec)] <- "WIND"
> wind.vec
[1] "WIND" "WIND" "WIND" "WIND"

关于agrep的好处是它匹配近似,所以“WINDY”被替换。请注意我使用向量执行此操作,但您可以通过将wind.vec替换为my.data.frame$my.wind.col来轻松扩展到数据框。

agrep返回大致匹配的索引,然后允许我使用[<-替换运算符将大致匹配的值替换为“WIND”。