Порядок в списке

я столкнулся с приложением, в котором мне нужно отсортировать data.frame по номерам столбцов, и ни одно из обычных решений , похоже, не позволяет этого.

Контекст создает метод as.data.frame.by . Поскольку объект по будет иметь последний столбец в качестве столбца значений и первые столбцы ncol-1 в качестве столбцов индекса. melt возвращает отсортированный в обратном порядке - индекс 3, затем индекс 2, затем индекс 1. Для совместимости с latex.table.by я хотел бы отсортировать его вперед. Но у меня проблемы с тем, чтобы сделать это достаточно общим способом. Закомментированная строка в функции ниже - это моя лучшая попытка.

as.data.frame.by <- function( x, colnames=paste("IDX",seq(length(dim(x))),sep="" ), ... ) {
  num.by.vars <- length(dim(x))
    res <- melt(unclass(x))
  res <- na.omit(res)
    colnames(res)[seq(num.by.vars)] <- colnames
    #res <- res[ order(res[ , seq(num.by.vars)] ) , ] # Sort the results by the by vars in the heirarchy given
    res
}

dat <- transform( ChickWeight, Time=cut(Time,3), Chick=cut(as.numeric(Chick),3) )
my.by <- by( dat, with(dat,list(Time,Chick,Diet)), function(x) sum(x$weight) )
> as.data.frame(my.by)
            IDX1         IDX2 IDX3 value
1  (-0.021,6.99] (0.951,17.3]    1  3475
2      (6.99,14] (0.951,17.3]    1  5969
3        (14,21] (0.951,17.3]    1  8002
4  (-0.021,6.99]  (17.3,33.7]    1   640
5      (6.99,14]  (17.3,33.7]    1  1596
6        (14,21]  (17.3,33.7]    1  2900
13 (-0.021,6.99]  (17.3,33.7]    2  2253
14     (6.99,14]  (17.3,33.7]    2  4734
15       (14,21]  (17.3,33.7]    2  7727
22 (-0.021,6.99]  (17.3,33.7]    3   666
23     (6.99,14]  (17.3,33.7]    3  1391
24       (14,21]  (17.3,33.7]    3  2109
25 (-0.021,6.99]    (33.7,50]    3  1647
26     (6.99,14]    (33.7,50]    3  3853
27       (14,21]    (33.7,50]    3  7488
34 (-0.021,6.99]    (33.7,50]    4  2412
35     (6.99,14]    (33.7,50]    4  5448
36       (14,21]    (33.7,50]    4  8101

Если строка не прокомментирована, она возвращает тарабарщину (она просто обрабатывает весь data.frame как вектор, что приводит к плачевным результатам).

Я даже пробовал такие хитрые штуки, как res , но безрезультатно.

Я подозреваю, что есть простой способ сделать это, но я этого не вижу.

Отредактируйте для пояснения : я не хочу указывать имена столбцов. Вместо этого я хочу иметь возможность сортировать его по числовому вектору (например, сортировать по столбцам 1: 4).

7
задан Community 23 May 2017 в 12:06
поделиться