gpt4 book ai didi

r - 按多个组计算跨多列的最大值

转载 作者:行者123 更新时间:2023-12-01 09:44:53 25 4
gpt4 key购买 nike

我有一个数据文件,其中包含三列中的数值和两个分组变量(ID 和 Group),我需要从中通过 ID 和 Group 计算单个最大值:

structure(list(ID = structure(c(1L, 1L, 1L, 2L), .Label = c("a1", 
"a2"), class = "factor"), Group = structure(c(1L, 1L, 2L, 2L), .Label =
c("abc",
"def"), class = "factor"), Score1 = c(10L, 0L, 0L, 5L), Score2 = c(0L,
0L, 5L, 10L), Score3 = c(0L, 11L, 2L, 11L)), class = "data.frame", row.names =
c(NA,
-4L))

我试图获得的结果是:
structure(list(ID = structure(c(1L, 1L, 2L), .Label = c("a1", 
"a2"), class = "factor"), Group = structure(c(1L, 2L, 2L), .Label = c("abc",
"def"), class = "factor"), Max = c(11L, 5L, 11L)), class = "data.frame",
row.names = c(NA,
-3L))

我正在 dplyr 中尝试以下操作:
SampTable<-SampDF %>% group_by(ID,Group) %>% 
summarize(max = pmax(SampDF$Score1, SampDF$Score2,SampDF$Score3))

但它会产生这个错误:
Error in summarise_impl(.data, dots) : 
Column `max` must be length 1 (a summary value), not 4

是否有一种简单的方法可以在 dplyr 中实现此目的?或 data.table ?

最佳答案

使用 data.table 的解决方案.在 3:5 上查找最大值列(分数列)来自 IDGroup .

library(data.table)
setDT(d)
d[, .(Max = do.call(max, .SD)), .SDcols = 3:5, .(ID, Group)]

ID Group Max
1: a1 abc 11
2: a1 def 5
3: a2 def 11

数据:
d <- structure(list(ID = structure(c(1L, 1L, 1L, 2L), .Label = c("a1", 
"a2"), class = "factor"), Group = structure(c(1L, 1L, 2L, 2L), .Label =
c("abc",
"def"), class = "factor"), Score1 = c(10L, 0L, 0L, 5L), Score2 = c(0L,
0L, 5L, 10L), Score3 = c(0L, 11L, 2L, 11L)), class = "data.frame", row.names =
c(NA,
-4L))

关于r - 按多个组计算跨多列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51331897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com