Как правильно преобразовать коэффициенты в цифры c, если исходные уровни факторов состоят из строк? - PullRequest
2 голосов
/ 30 апреля 2020

У нас есть фрейм данных с коэффициентами:

df <- data.frame("Var1" = c("A", "B", "B", "C"),
                 "Var2" = c("Can", "Can", "Not", "Not"))

> str(df)
'data.frame':   4 obs. of  2 variables:
 $ Var1: Factor w/ 3 levels "A","B","C": 1 2 2 3
 $ Var2: Factor w/ 2 levels "Can","Not": 1 1 2 2

Теперь нам нужно преобразовать коэффициенты в цифры c значения

dfb <- df
dfb[sapply(dfb, is.factor)] <- lapply(dfb[sapply(dfb, is.factor)], 
                                        as.numeric)

> str(dfb)
'data.frame':   4 obs. of  2 variables:
 $ Var1: num  1 2 2 3
 $ Var2: num  1 1 2 2

> summary(as.factor(dfb$Var1))
1 2 3 
1 2 1 
> summary(df$Var1)
A B C 
1 2 1  

Количество на каждом уровне эквивалентно. Тем не менее, согласно документации для фактора, есть этот предупреждающий знак:

В частности, as.numeri c, примененный к фактору, не имеет смысла и может произойти путем неявного принуждения. Чтобы преобразовать коэффициент f приблизительно в его исходные числовые значения c, рекомендуется использовать as.numeri c (уровни (f)) [f] и немного более эффективно, чем as.numeri c (as.character (f) ).

Если мы применим эту функцию к исходному фрейму данных, мы получим NA.

df <- data.frame("Var1" = c("A", "B", "B", "C"),
                 "Var2" = c("Can", "Can", "Not", "Not"))

df[sapply(df, is.factor)] <- lapply(df[sapply(df, is.factor)], 
                                       function(x) as.numeric(levels(x))[x])

Warning messages:
1: In FUN(X[[i]], ...) : NAs introduced by coercion
2: In FUN(X[[i]], ...) : NAs introduced by coercion

Итак, как правильно преобразовать эти факторы в цифры c просто

as.numeric()

Я применяю это к 18 переменным, некоторые из которых имеют более 52 уровней и Мне нужно убедиться, что я правильно их конвертирую в цифру c. Судя по моим тестам, это кажется правильным, но предупреждение о документации сбивает меня с толку. Я считаю, что я в корне неправильно понимаю что-то.

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