Преобразование переменных в факторы в R
Возможный дубликат:
идентификация или кодирование уникальных факторов с использованием R
У меня проблемы с R.
У меня есть набор данных, похожий на следующий, но гораздо дольше.
A B Pulse
1 2 23
2 2 24
2 2 12
2 3 25
1 1 65
1 3 45
В основном, первые 2 столбца кодируются. A
имеет 1, 2, которые представляют 2 разных веса.
B
имеет 1, 2, 3, которые представляют 3 разных раза.
Поскольку они являются закодированными численными значениями, R будет рассматривать их как числовые переменные.
Мне нужно использовать фактор-функцию для преобразования этих переменных в факторы.
Справка
Ответы
Ответ 1
Вот пример:
#Create a data frame
> d<- data.frame(a=1:3, b=2:4)
> d
a b
1 1 2
2 2 3
3 3 4
#currently, there are no levels in the `a` column, since it numeric as you point out.
> levels(d$a)
NULL
#Convert that column to a factor
> d$a <- factor(d$a)
> d
a b
1 1 2
2 2 3
3 3 4
#Now it has levels.
> levels(d$a)
[1] "1" "2" "3"
Вы также можете обрабатывать это при чтении в своих данных. См. Параметры colClasses
и stringsAsFactors
, например. readCSV()
.
Обратите внимание, что при вычислении таких столбцов факторинг не поможет вам и может замедлить работу вашей программы (хотя и пренебрежимо). Использование коэффициента потребует, чтобы все значения отображались в идентификаторы за кулисами, поэтому для любой печати вашего data.frame требуется поиск на этих уровнях - дополнительный шаг, требующий времени.
Факторы превосходны при хранении строк, которые вы не хотите хранить повторно, но скорее ссылаетесь на их идентификатор. Рассмотрите возможность хранения более удобного имени в таких столбцах, чтобы в полной мере воспользоваться факторами.
Ответ 2
данные образца
myData <- data.frame(A=rep(1:2, 3), B=rep(1:3, 2), Pulse=20:25)
myData$A <-as.factor(myData$A)
myData$B <-as.factor(myData$B)
или вы можете полностью выбрать свои столбцы и красиво обернуть его:
# select columns
cols <- c("A", "B")
myData[,cols] <- data.frame(apply(myData[cols], 2, as.factor))
levels(myData$A) <- c("long", "short")
levels(myData$B) <- c("1kg", "2kg", "3kg")
например:
> myData
A B Pulse
1 long 1kg 20
2 short 2kg 21
3 long 3kg 22
4 short 1kg 23
5 long 2kg 24
6 short 3kg 25