I want to add a new column like how these tables change below. Where I keep the values 'member' and 'casual' but change 'Subscriber' to 'member' and 'Customer' to 'casual' in a new column. I tried using a conditional mutate but it gives me the error "Error in FUN(left) : invalid argument to unary operator".
If anyone has any ideas on how to get this working, I'd greatly appreciate your input!
member_casual |
---|
member |
casual |
Subscriber |
Customer |
Subscriber |
Customer |
Changes to:
member_casual | membership_type |
---|---|
member | member |
casual | casual |
Subscriber | member |
Customer | casual |
Subscriber | member |
Customer | casual |
df < - df %>%
mutate(membership_type = case_when(member_casual == "member" ~ "member",
member_casual == "casual" ~ "casual",
member_casual == "Subscriber" ~ "member",
member_casual == "Customer" ~ "casual"))
>>Error in FUN(left) : invalid argument to unary operator
CodePudding user response:
One possible solution: since you only have two desired categories in your transformation, you could use ifelse()
.
df < - df %>%
mutate(membership_type = ifelse(member_casual %in% c("member", "Subscriber"), "member", "casual"))
The ifelse()
function will check the Boolean condition in the first argument. If the first argument is TRUE
, ifelse()
will return the second argument; otherwise, it will return the third argument.
CodePudding user response:
- Your last argument needs a default which you set with
TRUE ~ default value
so as it applies to your example, the below should work.
df < - df %>%
mutate(membership_type = case_when(member_casual == "casual" ~ "casual",
member_casual == "Subscriber" ~ "member",
member_casual == "Customer" ~ "casual",
TRUE ~ "member"))