Пакетное Преобразование Числа в Фактор - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь выполнить массовое преобразование переменных класса numeric и character в factor в R. Я чувствую, что это должно быть просто, но я сталкиваюсь с проблемой, фактически приводящей к фактору

То, что я сделал, это здесь:

>sapply(df, class)
    a           b          c
"numeric"   "numeric"  "numeric" 

>col.names <- c("a", "b", "c")
>df[,col.names] <- sapply(df[,col.names], as.factor)

и что я получаю обратно это:

>sapply(df, class)
     a            b            c
"character"  "character"  "character"

И я пытаюсь выяснить, почему он не будет преобразовывать из числового вфактор, и вместо этого идет в символ.

Обычно проблема переходит от фактора к числовому значению, поэтому я не смог найти ничего об этом типе проблемы.

Ответы [ 4 ]

0 голосов
/ 06 июня 2018

Вот решение tidyverse.

library(tidyverse)

data <- tibble(x = c("blue", "green", y = c(1:2))

data <- data %>%
  mutate(x = factor(x),
         y = factor(y))
0 голосов
/ 06 июня 2018

Полагаю, в этом случае sapply() возвращает вам матрицу, которая не может быть фактором.Используйте

df[,col.names] <- lapply(df[,col.names], as.factor)

, поскольку lapply() возвращает список факторов, чтобы вставить их в ваш файл.

0 голосов
/ 06 июня 2018

Вы должны использовать lapply.В следующем примере я создаю два одинаковых df с четырьмя столбцами.

df <- df2 <- data.frame(a = 1:5, b = 6:10, c = 11:15, d = 16:20)
col.names <- c("a", "b", "c")

df[,col.names] <- lapply(df[,col.names], as.factor)
sapply(df, class)
#a         b         c         d 
#"factor"  "factor"  "factor" "integer"

Обратите внимание, что если вы хотите изменить весь data.frame, вам нужно написать квадратные скобки, df2[].

df2[] <- lapply(df2, as.factor)
sapply(df2, class)
#a        b        c        d 
#"factor" "factor" "factor" "factor"
0 голосов
/ 06 июня 2018

Попробуйте что-то вроде:

df <- data.frame(sapply(df, as.factor))

Разница заключается в том, что он в конце помещается в data.frame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...