r - Assign value lable to the shaping of a varibale -
i have data frame "cb" column"gender" 2 variables "male" , "female". want "male" gets value 0 , female gets value 1.
i did this:
cb$gender <- ifelse(cb$gender == "male", 0, ifelse(cb$gender == "female", 1, 999)) when @ column result:
head(cb$gender, 3) [1] 1 0 0 that´s fine!
when make table result:
table(cb$gender) 0 1 3555 3488 i want 0 says "male" , 1 says "female"
for better understanding:
in spss possible assign value 0 "male" , value 1 "female". when print table looks this:
male female 3555 3488 but column looks this:
gender 0 1 1 0 this want.
thank you!
you can use factor turn variable factor , label it:
cb <- data.frame(gender= c("male", "female", "male", "male", "female", "female", "male", "male")) cb$gender <- ifelse(cb$gender == "male", 0, ifelse(cb$gender == "female", 1, 999)) str(cb) #'data.frame': 8 obs. of 1 variable: # $ gender: num 0 1 0 0 1 1 0 0 cb$gender <- factor(cb$gender , labels=c("male", "female")) str(cb) #'data.frame': 8 obs. of 1 variable: # $ gender: factor w/ 2 levels "male","female": 1 2 1 1 2 2 1 1 table(cb$gender) #male female # 5 3 note: r turning factors assigns levels 1 (in case 1 & 2)
alternatively, use packages lfactors:
library(lfactors) cb <- data.frame(gender= c("male", "female", "male", "male", "female", "female", "male", "male")) cb$gender <- ifelse(cb$gender == "male", 0, ifelse(cb$gender == "female", 1, 999)) cb$gender <- lfactor(cb$gender, levels=0:1, labels=c("male", "female")) print(cb$gender) #[1] male female male male female female male male #levels: male female #numeric levels: 0 1 table(cb$gender) # male female # 5 3 attributes(cb$gender)$llevels #[1] 0 1 yet option, closest spss analogy, use package labelled , sjmisc follows:
library(labelled) library(sjmisc) #access function to_label() cb <- data.frame(gender= c("male", "female", "male", "male", "female", "female", "male", "male")) cb$gender <- ifelse(cb$gender == "male", 0, ifelse(cb$gender == "female", 1, 999)) val_labels(cb$gender) <- c("male" = 0, "female" = 1) print(cb$gender) #<labelled double> #[1] 0 1 0 0 1 1 0 0 #labels: # value label # 0 male # 1 female table(to_label(cb$gender)) # male female # 5 3 also, can use combination of packages sjmisc , sjlabelled.
library(sjmisc) #access function to_label() library(sjlabelled) #function set_labels() cb <- data.frame(gender= c("male", "female", "male", "male", "female", "female", "male", "male")) cb$gender <- ifelse(cb$gender == "male", 0, ifelse(cb$gender == "female", 1, 999)) cb$gender <- set_labels(cb$gender, labels=c("male", "female")) print(cb$gender) #[1] 0 1 0 0 1 1 0 0 #attr(,"labels") # male female # 0 1 table(to_label(cb$gender)) # male female # 5 3 the function to_label() works packages lfactors, labelled , sjlabelled.
Comments
Post a Comment