1
summary <- tribble(
  ~version, ~label, ~average,
  "0.1", "pagex", 10,
  "0.2", "pagex", 12,
  "0.1", "pagey", 20,
  "0.2", "pagey", 21)

summary %>% 
  spread(version, average,sep="")  %>%
  dplyr::rowwise() %>%
  mutate(slowest = max(version0.1, version0.2))

这段代码工作正常。我想要这个代码的变体,它将适应任意数量的版本,因此在最后一行中,版本列需要由命名索引引用。

summary %>% 
  spread(version, average)  %>%
  dplyr::rowwise() %>%
  mutate(slowest = max(.[,unique(summary$version)]))

无论我尝试什么,最终都会以列最大值而不是行最大值结束。

我可以开始工作的一个选择是用 max 单独汇总长格式数据,并将结果连接到上述宽格式数据中。但我会很感激知道如何使用宽表格上的函数来解决问题。

4

1 回答 1

1

也许,我们可以将pmax其用作矢量化选项

library(dplyr)
library(tidyr)
summary %>%
   pivot_wider(names_from = label, values_from = average) %>% 
   transmute(version, slowest = pmax(pagex, pagey))

或者如果是另一种方式

summary %>% 
    pivot_wider(names_from = version, values_from = average) %>% 
    mutate(label, slowest = pmax(`0.1`, `0.2`))

如果多于两列

library(purrr)
summary %>% 
    pivot_wider(names_from = version, values_from = average) %>% 
    mutate(label, slowest = select(., -label) %>% reduce(pmax))
于 2020-07-05T19:30:19.423 回答