R语言 分组最小值或最大值

eivgtgni  于 2023-06-27  发布在  其他
关注(0)|答案(3)|浏览(151)

有很多关于如何使用SQL获取组的最小值或最大值的文章。在R中如何实现?
假设您有以下 Dataframe

ID | t | value
a | 1 | 3
a | 2 | 5
a | 3 | 2
a | 4 | 1
a | 5 | 5
b | 2 | 2
b | 3 | 1
b | 4 | 5

对于每个ID,我不需要最小值t,而是最小值t处的值。

ID | value
a | 3
b| 2
snz8szmq

snz8szmq1#

df是您的数据。frame -

library(data.table)

setDT(df) # convert to data.table in place

df[, value[which.min(t)], by = ID]

输出-

> df[, value[which.min(t)], by = ID]
   ID V1
1:  a  3
2:  b  2
xpszyzbs

xpszyzbs2#

您正在寻找tapply

df <- read.table(textConnection("
ID | t | value
a | 1 | 3
a | 2 | 5
a | 3 | 2
a | 4 | 1
a | 5 | 5
b | 2 | 2
b | 3 | 1
b | 4 | 5"), header=TRUE, sep="|")

m <- tapply(1:nrow(df), df$ID, function(i) {
  df$value[i[which.min(df$t[i])]]
})
# a  b
#  3  2
olmpazwi

olmpazwi3#

还有两种解决方案(使用SGIBB的DF):

sapply(split(df, df$ID), function(x) x$value[which.min(x$t)])

#a  b  
#3  2 

library(plyr)
ddply(df, .(ID), function(x) x$value[which.min(x$t)])

#  ID V1
#1 a   3
#2 b   2

相关问题