Подтвердить что ты не робот

Условно заменяя значения столбца на 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"

Но мне интересно, есть ли другой способ, более "ориентированный на данные."?

4b9b3361

Ответ 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"))