Как заменить факторные переменные? - PullRequest
0 голосов
/ 08 мая 2019

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

Как заменить U на "Unismoker". Новый уровень будет: N, S и Unismoker.

Вот что я пробовал: 1). mort_data2$smoker[which(mort_data2$smoker=="U")] = levels("Unismoker")

2). levels(mort_data2$smoker)[which(mort_data2$smoker=="U")] = "Unismoker"

Когда я использую table(mort_data2$smoker), оба подхода просто возвращают

N 167
S 170
U 0 (was 181 before)

Но я хочу вернуть следующее:

N 167
S 170
Unismoker 181

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Вы можете использовать именованный список с levels<- для замены элементов.Вы должны указать вещи для каждого уровня, даже если они не меняются.

x <- factor(c("N","S","U"))
levels(x) <- list(N="N",S="S",Unismoker="U")
x
[1] N         S         Unismoker
Levels: N S Unismoker
0 голосов
/ 08 мая 2019

Просто используйте levels.

# Example df
a=data.frame(a=c(rep("N",10),rep("S",20),rep("U",30)))
> str(a)
'data.frame':   60 obs. of  1 variable:
 $ a: Factor w/ 3 levels "N","S","U": 1 1 1 1 1 1 1 1 1 1 ...

> levels(a$a)
[1] "N" "S" "U"

levels(a$a)[3] = "Unismoker"

> summary(a)
         a     
 N        :10  
 S        :20  
 Unismoker:30  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...