繁体   English   中英

在 dplyr 中使用 max() 与命名索引引用的列发生变异

[英]Use max() in dplyr mutate with columns refered to by named index

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 单独汇总长格式数据,并将结果连接到上述宽格式数据中。 但我会很感激知道如何使用宽格式的 function 解决问题。

也许,我们可以使用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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM