gpt4 book ai didi

r - 在数据框中查找最大值按另一列中的值分组的行

转载 作者:行者123 更新时间:2023-12-04 12:34:16 25 4
gpt4 key购买 nike

我想在不使用 SQL 的情况下在 R 中解决这个问题。

How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?

当然,我可以使用 sqldf 来完成它,但 R 中也必须有一个很酷的应用方法来完成它吗?

最佳答案

设置数据 首先读入数据:

Lines <- "id  home  datetime  player   resource
1 10 04/03/2009 john 399
2 11 04/03/2009 juliet 244
5 12 04/03/2009 borat 555
3 10 03/03/2009 john 300
4 11 03/03/2009 juliet 200
6 12 03/03/2009 borat 500
7 13 24/12/2008 borat 600
8 13 01/01/2009 borat 700
"
DF <- read.table(text = Lines, header = TRUE)
DF$datetime <- as.Date(DF$datetime, format = "%d/%m/%Y")

1) base - by 有很多方法可以使用各种包来处理这个问题,但在这里我们将首先展示一个基本解决方案:

> do.call("rbind", by(DF, DF$home, function(x) x[which.max(x$datetime), ]))
id home datetime player resource
10 1 10 2009-03-04 john 399
11 2 11 2009-03-04 juliet 244
12 5 12 2009-03-04 borat 555
13 8 13 2009-01-01 borat 700

1a) base - ave 和变体(也只使用 R 的基数):

FUN <- function(x) which.max(x) == seq_along(x)
is.max <- ave(xtfrm(DF$datetime), DF$home, FUN = FUN) == 1
DF[is.max, ]

2) sqldf 这里使用 sqldf 以防万一:

> library(sqldf)
> sqldf("select id, home, max(datetime) datetime, player, resource
+ from DF
+ group by home")
id home datetime player resource
1 1 10 2009-03-04 john 399
2 2 11 2009-03-04 juliet 244
3 5 12 2009-03-04 borat 555
4 8 13 2009-01-01 borat 700

关于r - 在数据框中查找最大值按另一列中的值分组的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627462/

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