Как изменить количество факторов в R - PullRequest
0 голосов
/ 16 мая 2018

Я получил кадр данных со столбцом PE со значениями от 1 до 6:

> head(data)  
NID PE
1   4
2   5
3   3
4   4
5   1
6   6
7   2
8   3
9   3

, и мне нужно создать новый столбец фактора со значениями

> data$TYPE = factor(data$PE)  
> head(data)  
NID PE TYPE  
1   4   4  
2   5   5  
3   3   3  
4   4   4  
5   1   1  
6   6   6  
7   2   2  
8   3   3  
9   3   3  
> levels(data$TYPE)
[1] "1" "2" "3" "4" "5" "6"   

Нопроблема в количестве уровней.Col TYPE должен быть перекодирован только на 3 уровнях в соответствии со значениями данных $ PE.1,2 = уровень «1»;3,4 = уровень "2" и 5,6 = уровень "3", и получите что-то вроде этого:

> head(data)
NID PE TYPE
1   4   2
2   5   3
3   3   2
4   4   2
5   1   1
6   6   3
7   2   1
8   3   2
9   3   2
> levels(data$TYPE)
[1] "1" "2" "3"

Решение может быть очень простым, но я чувствую, что застрял и могу толькосоздать бесполезный ненужный код, поэтому вся помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Самый простой способ - создать TYPE с помощью cut, который предназначен для объединения числовых переменных вместо factor:

df <- data.frame(NID = 1:9, 
                 PE = c(4L, 5L, 3L, 4L, 1L, 6L, 2L, 3L, 3L))

df$TYPE <- cut(df$PE, 3, labels = 1:3)

df
#>   NID PE TYPE
#> 1   1  4    2
#> 2   2  5    3
#> 3   3  3    2
#> 4   4  4    2
#> 5   5  1    1
#> 6   6  6    3
#> 7   7  2    1
#> 8   8  3    2
#> 9   9  3    2

str(df)
#> 'data.frame':    9 obs. of  3 variables:
#>  $ NID : int  1 2 3 4 5 6 7 8 9
#>  $ PE  : int  4 5 3 4 1 6 2 3 3
#>  $ TYPE: Factor w/ 3 levels "1","2","3": 2 3 2 2 1 3 1 2 2

. Возможно, вам потребуется установить параметр breaksк явному вектору разрывов вместо числа бинов, чтобы заставить его дискретизировать так, как вам нравится.

Примечание: использование чисел в качестве меток для факторов - это действительно плохая идея.Факторы внутренне представлены целыми числами, и если метки - это разные числа, вы можете получить вектор, который выглядит как один набор чисел, но ведет себя как и иногда превращается в другой, что приводит к большой путанице.

0 голосов
/ 16 мая 2018

Возможности купе, оба с использованием пакета dplyr:

data <- data.frame(NID = 1:9,
                   PE = c(4, 5, 3, 4, 1, 6, 2, 3, 3))

Для вашего примера:

data <- data %>% 
  mutate(type = as.factor(ceiling(PE/2)))

В целом:

data <- data %>% 
  mutate(type = as.factor(case_when(
    PE %in% c(1, 2) ~ 1,
    PE %in% c(3, 4) ~ 2, 
    PE %in% c(5, 6) ~ 3
  )))

Тем не менее, в общем, я не люблю фактор-переменные, я обычно предпочитаю символьные переменные для категориальных переменных.

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