我想聚合一个包含时间日期和其他变量的数据集。现在,当我想在那一天记录一个变量的最早值时,我遇到了一个问题。我试过了
dt[, .(new_var1 := dt[time==(min(time)), .(var1)), by = .(month,day)]
但它会给我很多重复的行。有一天会有很多行。
答案 0 :(得分:2)
我们可以使用
library(data.table)
dt[order(time), head(.SD, 1L), .(month, day)]
如果我们需要max
和min
值,
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())