How to create new column based on two existing columns using case_when

Hello,

I am struggling to create a new column out of two existing ones, using conditionals.

bsp

What I want to do:

(if response_order == 1 && response_order_prev == 1) trialtype = 0
(if response_order == 0 && response_order_prev == 0) trialtype = 0
(if response_order == 1 && response_order_prev == 0) trialtype = 1
(if response_order == 0 && response_order_prev == 1) trialtype = 1

I installed the dplyr package, to use mutate and specifically case_when:

mydata2 <- mutate(trialtype = case_when(response_order==1 && response_order_prev==1)~ 0
                                       (response_order==0 && response_order_prev==0)~ 0
                                       (response_order==1 && response_order_prev==0)~ 1
                                       (response_order==0 && response_order_prev==1)~ 1, TRUE)
Fehler in UseMethod("mutate_") : 
  nicht anwendbare Methode für 'mutate_' auf Objekt der Klasse "logical" angewendet

It says that the method of mutate cannot be used for that kind of object of the class "logical"

How should I use mutate or case_when/if_else to fix this problem?

thx in advance

I would do it like this.

library(dplyr, warn.conflicts = FALSE)
Df <- data.frame(order=c(0,0,1,0,0,0,0),order_prev=c(NA,0,0,1,0,0,0))
Df <- Df %>% mutate(trialtype=case_when(
  order==1 & order_prev == 1 ~ 0,
  order == 0 & order_prev == 0 ~ 0,
  order == 1 & order_prev == 0 ~ 1,
  order == 0 & order_prev == 1 ~ 1,
))
Df
#>   order order_prev trialtype
#> 1     0         NA        NA
#> 2     0          0         0
#> 3     1          0         1
#> 4     0          1         1
#> 5     0          0         0
#> 6     0          0         0
#> 7     0          0         0

Created on 2020-12-23 by the reprex package (v0.3.0)

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.