Упорядоченные и номинальные переменные фактора необходимо учитывать отдельно . Непосредственное преобразование факторного столбца в целое или числовое значение даст значения в лексикографическом смысле.
Здесь Weekday
концептуально порядковый номер , Year
равен целое число , Season
обычно номинальное значение . Однако это опять-таки субъективно в зависимости от вида необходимого анализа.
Например, При непосредственном преобразовании из фактора в целочисленные переменные. В столбце Weekday
значение Wednesday
будет больше, чем в субботу и вторник :
dat[] <- lapply(dat, function(x)as.integer(factor(x)))
dat
# ID Season Year Weekday
#1 1 2 1 1
#2 2 2 2 3
#3 3 1 1 2 (Saturday)
#4 4 1 2 4 (Wednesday): assigned value greater than that ofSaturday
Таким образом, вы можете напрямую преобразовать фактор в целые числа только для столбцов Season
и Year
. Можно отметить, что для столбца year
он работает нормально, так как лексикографический смысл соответствует его порядковому значению.
dat[c('Season', 'Year')] <- lapply(dat[c('Season', 'Year')],
function(x) as.integer(factor(x)))
Weekday
необходимо преобразовать из упорядоченной факторной переменной с желаемым порядком уровней. Это может быть безвредно, если выполнять общее агрегирование , но радикально влияет на результаты при реализации статистических моделей .
dat$Weekday <- as.integer(factor(dat$Weekday,
levels = c("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday"), ordered = TRUE))
dat
# ID Season Year Weekday
#1 1 2 1 1
#2 2 2 2 2
#3 3 1 1 6 (Saturday)
#4 4 1 2 3 (Wednesday): assigned value less than that of Saturday
Используемые данные:
dat <- read.table(text=" ID Season Year Weekday
1 Winter 2017 Monday
2 Winter 2018 Tuesday
3 Summer 2017 Saturday
4 Summer 2018 Wednesday", header = TRUE)