Я использую пакет reactable
для создания сгруппированной таблицы. Когда вы определяете группирующую переменную, отображение сворачивается и выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/aHA12.png)
Приведенная выше таблица была создана с использованием:
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]
}"))))
Это требует, чтобы я предварительно отсортировал данные и просто возвратил первую строку значение, однако.
Как я могу построить это, чтобы не полагаться на мою предварительную сортировку?
Примечание: я пытался пометить этот вопрос именем пакета, но у меня недостаточно представителей создать тег.