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

标签 r

我想在不使用 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/

相关文章:

r - 从 R 中的多元回归中绘制 "regression line"

r - 根据行子集上的逻辑条件对数据框进行子集化

r - Spark ML 管道 Logistic 回归产生的预测比 R GLM 差得多

r - 如何使用 Sweave 控制回波宽度

r - 在 ggplot2 中为矩形颜色创建图例

r - 如何计算更快的月加权平均值

r - 检查 R 中的素数,为什么使用 'break' 的这个选项不起作用

r - 从多个节点检测核心

R - 如何通过行和列上的键值访问数据表数据

r - 有没有办法将 .csv 中的第一行需要是列,第二行标题,但在 R 中从宽格式转换为长格式?