I have a data frame "CB" with a column "gender" with two variables "Male" and "Female". I want that "Male" gets the value 0 and "Female" gets the value 1.
I did this:
CB$gender <- ifelse(CB$gender == "Male", 0, ifelse(CB$gender == "Female", 1,
999))
When I look at the column I get this result:
head(CB$gender, 3)
[1] 1 0 0
That´s fine!
When I make a table I get this result:
table(CB$gender)
0 1
3555 3488
I want that 0 says "Male" and 1 says "Female"
For better understanding:
In SPSS it is possible to assign the value 0 to "Male" and the value 1 to "Female". When I print a table it looks like this:
Male Female
3555 3488
But the column looks like this:
gender
0
1
1
0
This is what I want.
Thank you!
You can use factor
to turn a variable into a factor and 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 by turning into factors assigns levels from 1 (in this case 1 & 2)
Alternatively, you could 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 another option, closest to SPSS analogy, is to use package labelled
and sjmisc
as follows:
library(labelled)
library(sjmisc) #access to 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, you can use a combination of packages sjmisc
and sjlabelled
.
library(sjmisc) #access to 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 similarly with the packages lfactors
, labelled
and sjlabelled
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.