有条件地用data.table替换列值

时间:2014-07-02 16:51:33

标签: r data.table

我有以下data.table:

dt <- data.table(col1 = rep("a",6), col2 = c(1,1,1,2,3,1))

现在我想用col2“bigDog”替换col2中的所有1。我可以使用data.frame精神来做到这一点:

dt$col2[dt$col2==1,] <- "bigDog"

但我想知道是否有不同的方式,更多“data.table oriented”

2 个答案:

答案 0 :(得分:39)

如果您不想更改列的类型,请执行以下操作:

dt[col2 == 1, col2 := 123]

通过类型更改,您可以执行以下操作:

dt[, col2 := as.character(col2)][col2 == "1", col2 := "bigDog"]

如果您不首先更改类型,“bigDog”将被强制转换为整数,即NA。当然,你也会收到很多警告。

请注意,除了不那么繁琐的语法之外,使用:=还有一个好处就是不会生成额外的数据副本(如<-所示),而是在适当的位置进行修改。

答案 1 :(得分:0)

另外,您可以使用图书馆plyr

library(data.table)
library(plyr)
dt <- data.table(col1 = rep("a",6), col2 = c(1,1,1,2,3,1))
dt <- mapvalues(dt[,col2], c(1), c("BigDog"))