如何找到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中不同日期的最小值的主要内容,如果未能解决你的问题,请参考以下文章

如何从片段中调用 getSupportFragmentManager()?

在不同条件之间查找最小值时遇到麻烦

用于创建具有数据框中每个日期的最小值和最大值的表的函数

如何从给定数组的范围查询中获取给定值的最小异或值

如何将微调器的值放入不同的片段中?

如何在给定范围内找到数组中的最小值?