在mutate_each或summarise_each之后以"规范"方式重新排序列

Ale*_*lex 4 r columnname dplyr

以下面的例子为例.

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))
Run Code Online (Sandbox Code Playgroud)

检查名称temp_each,我们看到了

> names(temp_each)
[1] "X1"        "X2"        "X3"        "X1_mean"   "X2_mean"   "X3_mean"   "X1_median" "X2_median" "X3_median"
Run Code Online (Sandbox Code Playgroud)

也就是说,最终列是三个一组,总是嘱咐 X1,X2,X3+应用的功能.

但是,我希望它看起来像这样

[1] "X1"        "X1_mean"   "X1_median" "X2"        "X2_mean"   "X2_median" "X3"        "X3_mean"   "X3_median"
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何实现这一点,最好使用dplyr,对于具有许多列和任意列名称的数据框?

Vee*_*kar 5

在这里,你可以使用mixedordergtools

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
Run Code Online (Sandbox Code Playgroud)