Как я могу использовать агрегатную функцию в реагируемом для отображения значения, связанного с мин или макс другого столбца? - PullRequest
0 голосов
/ 18 апреля 2020

Я использую пакет reactable для создания сгруппированной таблицы. Когда вы определяете группирующую переменную, отображение сворачивается и выглядит следующим образом:

enter image description here

Приведенная выше таблица была создана с использованием:

library(reactable)

df<-data.frame(Type=c("Online","Online","Online","RL","RL","RL"),
               DaysBeforeBirthdayParty=c(9,8,7,9,8,7),
               Friends_2018=c(1,2,3,4,5,4),
               Friends_2019=c(10,15,13,19,20,21))

reactable(df,
          groupBy = "Type")

Здесь представлено несколько вариантов отображения агрегации без расширения групп: https://glin.github.io/reactable/articles/examples.html

Я изначально собирался использовать встроенную функцию максимума, но мои данные - время и самая последняя запись не всегда является записью с максимальным значением в столбцах «Друзья».

Пользовательская агрегация выглядит как необходимый инструмент, и автор связанной статьи предлагает пример:

colDef(
  aggregate = JS("
    function(values, rows) {
      // input:
      //  - values: an array of all values in the group
      //  - rows: an array of row info objects for all rows in the group
      //
      // output:
      //  - an aggregated value, e.g. a comma-separated list
      return values.join(', ')
    }
  ")
)

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

Я надеюсь изменить приведенную выше функцию так, чтобы она возвращала значение из одного столбца (например Friends_2018) как связан с минимальным значением в другом столбце (DaysBeforeBirthday).

Моя самая успешная попытка это:

library(reactable)

df<-data.frame(Type=c("Online","Online","Online","RL","RL","RL"),
               DaysBeforeBirthdayParty=c(9,8,7,9,8,7),
               Friends_2018=c(1,2,3,4,5,4),
               Friends_2019=c(10,15,13,19,20,21))

###sorting the data so that my row reference in the javascript
###chooses the value I want


df2<-df[order(df$DaysBeforeBirthdayParty),]

reactable(df2,
          groupBy = "Type",

          columns = list(
            Friends_2018 = 

          colDef(
            aggregate = JS("
                           function(values, rows) {
                           // input:
                           //  - values: an array of all values in the group
                           //  - rows: an array of row info objects for all rows in the group
                           //
                           // output:
                           //  - an aggregated value, e.g. a comma-separated list
                           return values[0]
                           }"))))

Это требует, чтобы я предварительно отсортировал данные и просто возвратил первую строку значение, однако.

Как я могу построить это, чтобы не полагаться на мою предварительную сортировку?

Примечание: я пытался пометить этот вопрос именем пакета, но у меня недостаточно представителей создать тег.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...