Условно заменяя значения столбца на data.table
У меня есть следующие данные. таблица:
dt <- data.table(col1 = rep("a",6), col2 = c(1,1,1,2,3,1))
Теперь я хочу заменить все 1 в col2 значением "bigDog". Я могу сделать это, используя дух data.frame:
dt$col2[dt$col2==1,] <- "bigDog"
Но мне интересно, есть ли другой способ, более "ориентированный на данные."?
Ответы
Ответ 1
Если бы вы не захотели изменить тип столбца, вы бы сделали:
dt[col2 == 1, col2 := 123]
С изменением типа вы можете сделать:
dt[, col2 := as.character(col2)][col2 == "1", col2 := "bigDog"]
Если вы сначала не меняете тип, "bigDog" будет принудительно привязан к целому, т.е. NA
. Конечно, вы также получите кучу предупреждений об этом.
Обратите внимание, что помимо менее громоздкого синтаксиса использование :=
имеет то преимущество, что не делает дополнительных копий данных (как <-
будет) и вместо этого будет изменяться.
Ответ 2
Кроме того, вы можете использовать библиотеку 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"))