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
.
CB$gender <- factor(CB$gender, 0:1, labels = c("Male", "Female"))
. The column will still sayMale
andFemale
though. AFAIK, the way SPSS displays it is not possible in R, except when you call the column withas.numeric(CB$gender)
. – LAPCB$gender = "Male"
is single equal sign a typo, should be==
? – zx8754head(CB$gender, 3) [1] Female Male Male Levels: Male Female
again. "0" and "1" for "Male" and "Female" are gone. – Hadsga