我有以下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”?
答案 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"))