在R中使用datatable或dplyr进行聚合

时间:2016-06-17 17:05:16

标签: r data.table aggregate

我想聚合一个包含时间日期和其他变量的数据集。现在,当我想在那一天记录一个变量的最早值时,我遇到了一个问题。我试过了

dt[, .(new_var1 := dt[time==(min(time)), .(var1)), by = .(month,day)]

但它会给我很多重复的行。有一天会有很多行。

2 个答案:

答案 0 :(得分:2)

我们可以使用

library(data.table)
dt[order(time), head(.SD, 1L), .(month, day)]

更新

如果我们需要maxmin值,

dt[dt[order(time), .I[c(1, .N)], .(month, day)]$V1]

答案 1 :(得分:0)

试试这个(使用dplyr

dt %>%
  group_by(month, date) %>%
  filter(time == min(time))

或者

dt %>%
  group_by(month, date) %>%
  top_n(1, -time)

编辑:获取每个日期的最小值:

dt %>%
  group_by(month, date) %>%
  top_n(1, -var1)

最小和最大

dt %>%
  group_by(month, date) %>%
  arrange(month, date) %>%
  filter(row_number() %in% c(1, n())