多亏了R中的rpivotTable包,我已经用这段代码生成了一个rpivottable
library("rpivotTable")
library("dplyr")
library("reshape2")
dane <- melt(HairEyeColor)
rpivotTable(dane,
rows = c("Hair", "Eye"),
cols = c("Sex"),
vals = "value",
aggregatorName = "Integer Sum",
locale = "en",
rendererName = "Table With Subtotal",
subtotals = TRUE)看起来是这样的:

按字母顺序排序。我想使用总和按降序对其进行排序。
我可以试一下这样的东西:
library("rpivotTable")
library("dplyr")
library("reshape2")
dane <- melt(HairEyeColor)
sorter <- paste0("function(attr) {",
"var sortAs = $.pivotUtilities.sortAs;",
"if (attr == \"Eye\") { return sortAs([\"",
dane %>% group_by(Eye) %>% summarise(i = sum(value)) %>% arrange(-i) %>% .$Eye %>% paste(collapse = "\", \""),
"\"]); }",
"if (attr == \"Hair\") { return sortAs([\"",
dane %>% group_by(Hair) %>% summarise(i = sum(value)) %>% arrange(-i) %>% .$Hair %>% paste(collapse = "\", \""),
"\"]); }",
"}")
rpivotTable(dane,
rows = c("Hair", "Eye"),
cols = c("Sex"),
vals = "value",
aggregatorName = "Integer Sum",
locale = "en",
rendererName = "Table With Subtotal",
subtotals = TRUE,
sorters = sorter)然后我就得到了这个:

这是按“外部”组排序的。我希望按两个组进行排序,如下所示:

在rpivotTable包中可以吗?
发布于 2019-08-15 03:18:23
我可能会从你的问题中学到比你从我的答案中学到的更多,因为我喜欢你巧妙地混合了dplyr和JavaScript。为了重申你的问题,你在你的排序函数中指定了一个单一的眼睛排序列表,但是你确实想要一个不同的眼睛排序列表,这取决于头发的分组。所以你的眼睛排序列表:
library("dplyr")
library("reshape2")
dane <- melt(HairEyeColor)
dane %>% group_by(Eye) %>% summarise(i = sum(value)) %>%
arrange(-i) %>% .$Eye %>% paste(collapse = "\", \"")...has此输出:
"Brown\", \"Blue\", \"Hazel\", \"Green"..。这与每个头发分组中使用的排序顺序是相同的。另请参见this answer。
我不是pivottable方面的专家,但是要做你想做的事情,我认为排序函数必须处理两个属性,比如[\"Hair\", \"Eye\"],而不仅仅是一个。我相信这样的dplyr表达式会让你得到正确的二维列表:
dane %>% group_by(Hair, Eye) %>%
summarise(hairEyeSum = sum(value)) %>%
ungroup() %>%
arrange( desc(hairEyeSum)) %>%
group_by( Hair) %>%
mutate( hairSum = sum(hairEyeSum)) %>%
arrange( desc(hairSum), desc(hairEyeSum)) %>%
ungroup() %>%
transmute( hairEyeList = paste0( "[\"", Hair, "\",\"", Eye, "\"]")) 输出:
# A tibble: 16 x 1
hairEyeList
<chr>
1 "[\"Brown\",\"Brown\"]"
2 "[\"Brown\",\"Blue\"]"
3 "[\"Brown\",\"Hazel\"]"
4 "[\"Brown\",\"Green\"]"
5 "[\"Blond\",\"Blue\"]"
6 "[\"Blond\",\"Green\"]"
7 "[\"Blond\",\"Hazel\"]"
8 "[\"Blond\",\"Brown\"]"
9 "[\"Black\",\"Brown\"]"
10 "[\"Black\",\"Blue\"]"
11 "[\"Black\",\"Hazel\"]"
12 "[\"Black\",\"Green\"]"
13 "[\"Red\",\"Brown\"]"
14 "[\"Red\",\"Blue\"]"
15 "[\"Red\",\"Hazel\"]"
16 "[\"Red\",\"Green\"]" 但我没能让排序功能正常工作。
https://stackoverflow.com/questions/52476828
复制相似问题