#r #shiny
#r #блестящий
Вопрос:
У меня есть фрейм данных ниже, в котором перечислены типы столбцов.
new_df lt;- structure(list(ID = list(ID = "21", ID = "4"), MET = structure(list(c("A", "B"), c("C", "D")), .Names = c("","")), REGN = structure(list(c("ALL", "US"), "ALL"), .Names = c("", "")), YEAR = list(YEAR = "2020", YEAR = "2020"), WEEK = list(WEEK = c("12", "13", "14"), WEEK = "16"), ANN = list(ANN = "Seller",ANN = "Rise")), row.names = 1:2, class = "data.frame")
Но проблема в том , что я не в состоянии разобраться в этом. Если он попытается отсортировать, я получу ошибку ниже
Error in rank(x, ties.method = "min", na.last = "keep") : unimplemented type 'list' in 'greater'
Комментарии:
1. Вы хотите отсортировать его, но по какому столбцу(столбцам) ?
2. Скажи «Удостоверение личности». На самом деле любая колонка. Если я также помещу эту таблицу DT блестящей, я не смогу сортировать, так как это список
3. Тип-список, потому что вы установили его сами или у вас нет контроля над этим ? Честно говоря, это немного раздражает-работать со списком внутри фрейма данных
4. Я нахожу столбцы списка гораздо более элегантными, чем альтернативы в определенных ситуациях, но много инструментов для упорядочения/анализа/обобщения/… все они основаны на том, что каждый столбец является вектором. Это, вероятно, верно для большинства утилит R-фреймов , но, прежде
sort
order
всего, иrank
всем нужны векторы в качестве входных данных.
Ответ №1:
Я не знаю, DT
будет ли у этого способ сортировки list
s, но я думаю, что вам нужно рассчитать порядок немного более подробно:
new_df[order(sapply(new_df$WEEK, function(z) max(as.integer(z)))),] # ID MET REGN YEAR WEEK ANN # 1 21 A, B ALL, US 2020 12, 13, 14 Seller # 2 4 C, D ALL 2020 16 Rise
Ключ — это передача векторов order
. Также можно добавить заказ по нескольким столбцам (тай-брейкеры) с дополнительными sapply
вызовами:
new_df[order( -sapply(new_df$WEEK, function(z) max(as.integer(z))), sapply(new_df$MET, `[`, 1) ),]
Обратите внимание, что каждый из sapply
s может возвращать символ или число, но для того, чтобы выполнять сортировку по столбцам по убыванию, добавляя отрицательное значение (как в моих примерах выше), оно должно быть в какой-то форме числовым.