如何找到r中不同日期的最小值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何找到r中不同日期的最小值相关的知识,希望对你有一定的参考价值。
我有一个数据框数据
Date Marks
21-01-2019 18
22-01-2019 12
23-01-2019 14
24-01-2019 20
25-01-2019 16
19-02-2019 12
20-02-2019 11
21-02-2019 18
22-02-2019 15
23-02-2019 20
24-02-2019 14
我想按月份和特定年份对数据进行分组,以获得最低分。我的输出如下所示:
Date Marks
22-01-2019 12
20-02-2019 11
答案
因为您知道固定的日期格式,所以您可以仅将日期部分和日期部分切除,然后使用汇总来计算年/月的最小值。
table %>%
mutate(Date = substring(Date, 4)) %>%
group_by(Date) %>%
summarize(Marks = min(Marks))
另一答案
要获得每月和每年的最小值,可以执行:
df %>%
group_by(Date = format(as.Date(Date, format = "%d-%m-%Y"), "%m-%Y")) %>%
summarise_all(min)
Date Marks
<chr> <int>
1 01-2019 12
2 02-2019 11
与base R
相同:
aggregate(Marks ~ cbind(Date = format(as.Date(Date, format = "%d-%m-%Y"), "%m-%Y")),
FUN = min,
data = df)
如果您还想返回相应的日期:
df %>%
group_by(month_year = format(as.Date(Date, format = "%d-%m-%Y"), "%m-%Y")) %>%
slice(which.min(Marks)) %>%
ungroup() %>%
select(-month_year)
Date Marks
<chr> <int>
1 22-01-2019 12
2 20-02-2019 11
另一答案
数据表+润滑示例:
数据
dt = data.table(
Date = seq(as.Date('2001-01-27'), as.Date('2001-02-03'), 1),
Marks = rnorm(8)
)
> dt
Date Marks
1: 2001-01-27 -1.43603728
2: 2001-01-28 -1.02685408
3: 2001-01-29 0.37307426
4: 2001-01-30 -0.79033901
5: 2001-01-31 0.05463855
6: 2001-02-01 1.62495320
7: 2001-02-02 -0.44335638
8: 2001-02-03 -0.66227100
代码
dtsum = dt[, .(Date = Date[which.min(Marks)], MinMark = min(Marks)), .(Month = month(Date))][, 2:3]
> dtsum
Date MinMark
1: 2001-01-27 -1.436037
2: 2001-02-03 -0.662271
以上是关于如何找到r中不同日期的最小值的主要内容,如果未能解决你的问题,请参考以下文章