【问题标题】:How to take all records with max value for each group [duplicate]如何为每个组获取具有最大值的所有记录[重复]
【发布时间】:2018-03-30 11:00:17
【问题描述】:

我有一个数据表如下:

   user                time follow_group
1:    1 2017-09-01 00:01:01            1
2:    1 2017-09-01 00:01:20            1
3:    1 2017-09-01 00:03:01            1
4:    1 2017-09-01 00:10:01            2
5:    1 2017-09-01 00:11:01            2
6:    2 2017-09-01 00:01:03            1
7:    2 2017-09-01 00:01:08            1
8:    2 2017-09-01 00:03:01            1

从这里我想为每个用户获取所有具有最高follow_group的记录

所以我做的是

data[max(follow_group), , by = list(user)] 

但这给我返回了一个错误

Error in `[.data.table`(data, max(follow_group),  : 
  'by' or 'keyby' is supplied but not j

任何帮助表示赞赏。谢谢。

【问题讨论】:

标签: r group-by data.table


【解决方案1】:

您可以使用data.table

library(data.table)
setDT(df)[, .SD[follow_group == max(follow_group)], by = user] 

或者这个dplyr:

library(dplyr)
df %>%
  group_by(user) %>%
  filter(follow_group == max(follow_group))

结果:

   user                time follow_group
1:    1 2017-09-01 00:10:01            2
2:    1 2017-09-01 00:11:01            2
3:    2 2017-09-01 00:01:03            1
4:    2 2017-09-01 00:01:08            1
5:    2 2017-09-01 00:03:01            1

# A tibble: 5 x 3
# Groups:   user [2]
   user                time follow_group
  <int>               <chr>        <int>
1     1 2017-09-01 00:10:01            2
2     1 2017-09-01 00:11:01            2
3     2 2017-09-01 00:01:03            1
4     2 2017-09-01 00:01:08            1
5     2 2017-09-01 00:03:01            1

数据:

df = structure(list(user = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L), time = c("2017-09-01 00:01:01", 
"2017-09-01 00:01:20", "2017-09-01 00:03:01", "2017-09-01 00:10:01", 
"2017-09-01 00:11:01", "2017-09-01 00:01:03", "2017-09-01 00:01:08", 
"2017-09-01 00:03:01"), follow_group = c(1L, 1L, 1L, 2L, 2L, 
1L, 1L, 1L)), class = "data.frame", .Names = c("user", "time", 
"follow_group"), row.names = c(NA, -8L))

【讨论】:

  • 尝试数据[, j = max(follow_group), by = user]
  • @user7648269 这给出了每个 user 的最大值,而不是 所有行 是每个 user 的最大值
  • 是的,然后根据 Arun 的回答为每个用户取最大值并加入主表:stackoverflow.com/a/31854111
猜你喜欢
  • 2021-02-01
  • 1970-01-01
  • 2019-08-14
  • 2019-06-09
  • 2014-10-05
  • 2018-02-22
  • 2022-11-07
  • 2017-07-26
  • 1970-01-01
相关资源
最近更新 更多