в R, как установить и сохранить пользовательские уровни в факторе с различными метками? - PullRequest
0 голосов
/ 24 февраля 2019

в R, как установить и сохранить пользовательские уровни в факторе с разными метками?

То есть я хочу установить пользовательские числа в уровнях фактора, и эти числовые значения - целые числа, которые нужно сохранитьи не конвертируется в «1, 2, 3 и т. д.».

Я знаю, что одним из решений является установка этих весов в качестве меток, но тогда я пропущу «метки» фактора.

«Весовое» расстояние между факторами не сохраняется.Возможно ли в R добиться чего-то подобного, используя одну переменную?

Например:

age_f <- factor( c(1, 10, 100), levels = c( 1, 10, 100 ), labels = c( "baby", "child", "old" ), ordered = T )
levels(age_f)
   [1] "baby"  "child" "old"  
labels(age_f)
   [1] "1" "2" "3"
 labels(levels(age_f))
    [1] "1" "2" "3"
 as.numeric(age_f)
    [1] 1 2 3

Desired output: 
 as.numeric(age_f)
        [1] 1 10 100

Если этого не существует в коэффициентах R, легко ли получить такой результат с помощью пользовательской функции?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

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

Обходной путь - «вставить» уровни фактора в метки факторов,а затем с функцией, чтобы разделить их на две разные DF.

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

Однако это может оказаться не очень практичным, если выхочу не устанавливать "два раза" ваши переменные.

Поэтому, я полагаю, это добавляет ясности в манипулирование факторами.У вас есть вся необходимая информация в одном месте.Если у вас есть необходимость, вы можете разделить их, создав две разные DFS.

# Example Factor: 
age_f <- factor( ordered( 1:3 ), labels = c( "1 Infant", "10 Child", "100 Old" ) )
# The Function
Leveling_Labels <- function( factors, split_arg = " " ) { 

  leveling_Labels <- list()

  for( i in 1:length( factors ) )  { 

    splits                  <- strsplit( as.character( factors[[i]] ), split_arg )
    leveling_Labels[[i]]    <- as.numeric( unlist( lapply( 1:length( splits ), function(x) splits[[x]][1] ) ) )
    levels( factors[[i]] )  <- unlist( lapply( 1:length( splits ), function(x) splits[[x]][2] ) )

  }

  results <- c( factors, leveling_Labels )
  results

}
  • Фактор, который был сделан:

    age_f

 [1] 1 Infant 10 Child 100 Old 
    Levels: 1 Infant < 10 Child < 100 Old
  • Запуск функции, которая отделяет фактор от его уровней:

Leveling_Labels (list (age_f), "")

[[1]]
[1] Infant Child  Old   
Levels: Infant < Child < Old

[[2]]
[1]   1  10 100
  • У вас может быть в виде списка ряд факторов

ps. Знаете ли вы, где я могу добавить R-функции, сделанные самостоятельно, подобным образом?Знаете ли вы пакеты, которые открыты для совместной работы или активно ищут вкладчиков на наивном уровне?

0 голосов
/ 24 февраля 2019

Для этого вы можете использовать пакет labelled.

library(labelled)
labelled(c(1, 10, 100), c(baby = 1, child = 10 , old = 100))

<Labelled double>
[1]   1  10 100

Labels:
 value label
     1  baby
    10 child
   100   old

Если позже вы захотите преобразовать его в обычный коэффициент, вы можете использовать to_factor.

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