I have a data frame that looks like
set.seed(123)
test_data <- data.frame(id = 1:6,
var1 = rbinom(n = 6, size = 1, prob = .5),
var2 = rbinom(n = 6, size = 1, prob = .5),
age = sample(18:30, size = 6, replace = T))
I want to use dplyreither purrrto change the values equal to 1 in var1and var2, the name of their column and save 0 as they are.
The result will look as follows.
id var1 var2 age
1 0 var2 26
2 var1 var2 25
3 0 var2 19
4 var1 0 29
5 var1 var2 21
6 0 0 18
I tried using dplyr::mutate_at
mutate_at(test_data,
vars(var1, var2),
function(var_x) { ifelse(var_x == 1, colnames(var_x), var_x) })
This returns the following error. So probably not the best way to go.
Error in evalq (sys.calls (),): the replacement has a length of zero Optional: Warning message: In rep (yes, length.out = length (ans)): 'x' is NULL, so the result will be NULL
And I tried using purrr:map_at
map_at(test_data,
c("var1", "var2"),
function(var_x) { ifelse(var_x == 1, colnames(var_x), var_x) })
And that returns this error.
ans [test ok] < - rep (, length.out = length (ans)) [test & ok]: . : : In rep (, length.out = length (ans)): 'x' NULL, NULL
dplyr purrr, , .