Reputation: 5049
There are occasions where a vector with column names of data frame need to be passed into a function ( dplyr mutate
in my case).
example column name vector is a as c(V1, V2, V3, V4, V5, V6, V7, V8, V9, V10)
I can construct this as a character vector as paste0("V", 1:10)
.
> paste0("V", 1:10)
[1] "V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8" "V9" "V10"
How do I transform this such that it can be passed to the median function below instead of writing down the unwieldy long column names in there ?
df %>%
rowwise() %>%
mutate(median_val = median(c(V1, V2, V3, V4, V5, V6, V7, V8, V9, V10), na.rm = T))
Example data
id loc V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 loc1 80 80 80 80 64 64 80 80 80 80
2 loc2 64 64 64 64 64 NA NA NA NA NA
3 loc2 256 256 256 240 240 240 240 240 240 240
4 loc3 NA NA NA NA NA NA NA NA NA NA
Output Expected
id loc median_val
1 loc1 80
2 loc2 64
3 loc2 240
4 loc3 NA
Upvotes: 2
Views: 619
Reputation: 1664
df2 = data.frame(c("a", "b", "c", "d", "e"), c(1:5), c(6:10), c(1,1,1,NA,1), rep(NA,5))
colnames(df2) = paste0("v", 1:5)
apply(df2[,paste0("v", 2:5)], 1, median, na.rm = T)
Upvotes: 1