以下面的例子为例。
library(dplyr)
temp <- data.frame(lapply(1:3, function(i) rnorm(5, 0, 1)))
names(temp) <- paste0("X", 1:3)
temp_each <-
temp %>%
mutate_each(funs(mean, median))
检查
temp_each
的名称,我们看到> names(temp_each)
[1] "X1" "X2" "X3" "X1_mean" "X2_mean" "X3_mean" "X1_median" "X2_median" "X3_median"
也就是说,最后一列是三列,总是排序
X1
, X2
, X3
+ 应用的函数。但是,我希望它看起来像这样
[1] "X1" "X1_mean" "X1_median" "X2" "X2_mean" "X2_median" "X3" "X3_mean" "X3_median"
有谁知道如何为具有许多列和任意列名的数据框实现这一点,最好使用
dplyr
? 最佳答案
在这里你可以使用 mixedorder
中的 gtools
library(gtools)
temp_each[,mixedorder(colnames(temp_each))]
# X1 X1_mean X1_median X2 X2_mean X2_median
#1 0.28285115 -0.4369067 0.08556155 -0.9402162 -0.9857593 -0.7676634
#2 -1.29193398 -0.4369067 0.08556155 -0.5442052 -0.9857593 -0.7676634
#3 -1.42261044 -0.4369067 0.08556155 -0.7676634 -0.9857593 -0.7676634
#4 0.16159810 -0.4369067 0.08556155 -2.2270920 -0.9857593 -0.7676634
#5 0.08556155 -0.4369067 0.08556155 -0.4496198 -0.9857593 -0.7676634
# X3 X3_mean X3_median
#1 0.04606554 0.0923336 -0.08168136
#2 -0.08168136 0.0923336 -0.08168136
#3 0.90535333 0.0923336 -0.08168136
#4 -0.15699052 0.0923336 -0.08168136
#5 -0.25107897 0.0923336 -0.08168136
关于在 mutate_each 或 summarise_each 之后以 'canonical' 方式对列重新排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31129823/