PowerPoint Trenton
PowerPoint Trenton

Reputation: 71

chaning the elements into another character in the data frame

Suppose I have the following data frame:

> survey
workshop gender q1 q2 q3 q4
1 R Female 4 3 4 5
2 SPSS Male 3 4 3 4
3 <NA> <NA> 3 2 NA 3
4 SPSS Female 5 4 5 3
5 STATA Female 4 4 3 4
6 SPSS Female 5 4 3 5

I would like to change "Female" to "F" and change "Male" to "M". Of course I can remake a column of c(F,M,,F,F,F), but is it possible to set a command function take "female" and "male" as inputs and outputs "F" and "M"?

Upvotes: 0

Views: 39

Answers (3)

AndS.
AndS.

Reputation: 8110

A couple extra options for posterity:

#option 1
survey$gender <- as.character(factor(survey$gender,
                                     levels = c("Female", "Male"),
                                     labels = c("F", "M"))) 

#option 2
survey$gender <- unname(sapply(survey$gender,
                               \(x) switch(x, "Female" = "F", "Male" = "M")))

#option 3
survey$gender <- ifelse(survey$gender == "Male", "M", 
                        ifelse(survey$gender == "Female", "F", NA))

Upvotes: 2

Captain Hat
Captain Hat

Reputation: 3237

Explicit replacement in base R

survey[["gender"]][survey[["gender"] == "Male"] <- "M"
survey[["gender"]][survey[["gender"] == "Female"] <- "F"

Using tidyverse packages

require(stringr)
require(dplyr)
survey <- mutate(survey, gender = str_sub(gender, 1))

## You might also consider encoding gender as a factor:
survey <- mutate(survey, gender = factor(gender))

Upvotes: 2

akrun
akrun

Reputation: 887138

We can use substring in base R

survey$gender <- substring(survery$gender, 1, 1)

Or with sub

survey$gender <- sub("^(.).*", "\\1", survey$gender)

Upvotes: 2

Related Questions