Hi - I'm running into an issue when I use mutate_if in a mixed data frame, where it stops at the first FALSE occurrence:
g <- DF %>%
mutate_if(is.numeric, funs(. / Marker_2+))
My large data frame looks something like this:
colnames = Marker_1+, Marker_2+, ..., Categorial_info, Character_info,..., Marker_3+, Marker_4+
where Marker columns are integers and all else are factors. When I run the above script, I get the expected result for the first Marker_1 and Marker_2, but it Marker_3 and Marker_4 are left unchanged. It appears mutate stops at the first FALSE given by is.numeric. Any help would be much appreciated.
I think the problem is that you have divided the column Marker_2+ by itself, changing it to all 1's, so any column processed after that is unchanged. Below you can see that mutate_if does process every column when the function is to add 100. Dividing by column B also works, but columns E and F do not change in value because B = 1 in all cases.
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
df <- data.frame(A = 1:8, B = 2:9, C = LETTERS[1:8], D = LETTERS[2:9], E = 3:10, F = 4:11)
df
#> A B C D E F
#> 1 1 2 A B 3 4
#> 2 2 3 B C 4 5
#> 3 3 4 C D 5 6
#> 4 4 5 D E 6 7
#> 5 5 6 E F 7 8
#> 6 6 7 F G 8 9
#> 7 7 8 G H 9 10
#> 8 8 9 H I 10 11
g <- df %>% mutate_if(is.numeric, funs(. + 100))
g
#> A B C D E F
#> 1 101 102 A B 103 104
#> 2 102 103 B C 104 105
#> 3 103 104 C D 105 106
#> 4 104 105 D E 106 107
#> 5 105 106 E F 107 108
#> 6 106 107 F G 108 109
#> 7 107 108 G H 109 110
#> 8 108 109 H I 110 111
g2 <- df %>% mutate_if(is.numeric, funs(./B))
g2
#> A B C D E F
#> 1 0.5000000 1 A B 3 4
#> 2 0.6666667 1 B C 4 5
#> 3 0.7500000 1 C D 5 6
#> 4 0.8000000 1 D E 6 7
#> 5 0.8333333 1 E F 7 8
#> 6 0.8571429 1 F G 8 9
#> 7 0.8750000 1 G H 9 10
#> 8 0.8888889 1 H I 10 11