Hi
I would like to recode data in many columns, making 5 become 1,
making 4 become 2, making 2 become 4, making 1 become 5, to change the
direction of negative-worded item questions. Value of 3 I will leave intact.
How do I do this ?
Thanks.
You can use the dplyr
function mutate_at()
to do this. mutate_at()
is a scoped version of the mutate()
function meaning it essentially performs a mutate()
on many variables at once.
Say your data is stored in the table tbl
and you want to switch the direction of the variables x, y and z.
mutate_at(tbl, vars(x,y,z), ~6-.)
Here's my data, here's which variables I want you to do things to, and here's what I want you to do.
That last bit is a "lambda function" and basically just replaces the .
with whatever variables you've chosen. The above is the equivalent of writing:
mutate(tbl, x = 6 - x, y = 6 - y, z = 6 - z)
If you're familiar with it, the mutate_at()
function works with the pipe, much like the mutate()
function does:
tbl %>% mutate_at(vars(x,y,z),~6-.)
If you have the magrittr
package and find the 6-.
a little hard to read, then thesubtract()
function will also work in the lambda function:
tbl %>% mutate_at(vars(x,y,z),~subtract(6,.))
Also within the magrittr
package is the %<>%
update pipe which will store the results back into the tbl
table variable:
tbl %<>% mutate_at(vars(x,y,z),~subtract(6,.))
Which is equivalent to:
tbl <- tbl %>% mutate_at(vars(x,y,z),~subtract(6,.))
Thank you for detailed reply. I thought that I should use case_when() to accomplish that.
You could use case_when()
, however, this would over complicate things. You'd have to write out all five cases (4 flipped and the value 3 remaining the same), whereas mathematically just doing 6-x
does the same thing
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.