Data set contains many columns containing values which are either NA or 1, kind of like this:
> data_frame(a = c(NA, 1, NA, 1, 1), b=c(1, NA, 1, 1, NA))
# A tibble: 5 x 2
a b
<dbl> <dbl>
1 NA 1.00
2 1.00 NA
3 NA 1.00
4 1.00 1.00
5 1.00 NA
Desired output: replace all the 1 values with the name of the column as a string,
> data_frame(a = c(NA, 'a', NA, 'a', 'a'), b=c('b', NA, 'b', 'b', NA))
# A tibble: 5 x 2
a b
<chr> <chr>
1 <NA> b
2 a <NA>
3 <NA> b
4 a b
5 a <NA>
here's my attempt using an anonymous function in transmute_all:
> data_frame(a = c(NA, 1, NA, 1, 1), b=c(1, NA, 1, 1, NA)) %>%
+ transmute_all(
+ funs(function(x){if (x == 1) deparse(substitute(x)) else NA})
+ )
Error in mutate_impl(.data, dots) :
Column `a` is of unsupported type function
EDIT: Attempt # 2:
> data_frame(a = c(NA, 1, NA, 1, 1), b=c(1, NA, 1, 1, NA)) %>%
+ transmute_all(
+ funs(
+ ((function(x){if (!is.na(x)) deparse(substitute(x)) else NA})(.))
+ )
+ )
# A tibble: 5 x 2
a b
<lgl> <chr>
1 NA b
2 NA b
3 NA b
4 NA b
5 NA b
Warning messages:
1: In if (!is.na(x)) deparse(substitute(x)) else NA :
the condition has length > 1 and only the first element will be used
2: In if (!is.na(x)) deparse(substitute(x)) else NA :
the condition has length > 1 and only the first element will be used
>
See Question&Answers more detail:
os