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

Posted

技术标签:

【中文标题】用于创建具有数据框中每个日期的最小值和最大值的表的函数【英文标题】:Function to create a table with min and max of each date in the dataframe 【发布时间】:2021-07-22 23:20:41 【问题描述】:

我是 R 新手,我正在尝试创建一个函数,该函数将创建一个新数据框,显示原始数据框中每个日期列的最小值和最大值。 我有一个包含不同类型变量(数字、日期、字符......)的数据框(df)。我想创建一个只选择日期列(Date1、Date2、Date3、Date4,列数可以变化的函数) ...)。并创建一个新的数据框,向我显示 Date 的每个列的最小值和最大值(参见下面的输出)。

输入数据框 df(日期列数可能不同):

Num1     |     Chr1  |     Date1    |    Date2     |  Date3       |

1        |     Name1 |   2012-01-01 |   2018-02-01 |  2015-05-01  |

2        |     Name2 |   2013-01-01 |   2016-02-01 |   2014-05-01 |

3        |     Name3 |   2014-01-01 |   2014-02-01 |   2013-05-01 |

输出数据帧 df1:

      |  min_Date1    |  max_Date1   | min_Date2   | max_Date2 |  min_Date3 |  max_Date3 |
      -------------- --------------  ---------- ------------- ------------ -------------
date  |  2012-01-01   |  2014-01-01  | 2014-02-01  | 2018-02-01| 2013-05-01 | 2015-05-01 |

感谢您的建议

【问题讨论】:

【参考方案1】:

可以通过dplyr 包或正则表达式来完成。我们首先创建示例数据框:

# The data frame
data <- data.frame(
  Num1 = c(1, 2, 3),
  Char1 = c("Name1", "Name2", "Name3"),
  Date1 = as.Date(c("2012-01-01", "2013-01-01", "2014-01-01")),
  Date2 = as.Date(c("2018-02-01", "2016-02-01", "2014-02-01")),
  Date3 = as.Date(c("2015-05-01", "2014-05-01", "2013-05-01"))
)

dplyr

df_max <- dplyr::select(data, dplyr::starts_with("Date")) %>% 
  lapply(max) %>% 
    as.data.frame

df_min <- dplyr::select(data, dplyr::starts_with("Date")) %>% 
  lapply(min) %>% 
    as.data.frame

通过正则表达式

df_max <- as.data.frame(lapply(data[grep("^Date", names(data))], max))
df_min <- as.data.frame(lapply(data[grep("^Date", names(data))], min))

结合两个数据框

names(df_max) <- paste0("max_", names(df_max))
names(df_min) <- paste0("min_", names(df_min))
df1 <- cbind(df_min, df_max)
df1 <- df1[, c(rbind(names(df_min), names(df_max)))]

【讨论】:

以上是关于用于创建具有数据框中每个日期的最小值和最大值的表的函数的主要内容,如果未能解决你的问题,请参考以下文章

用于从 Hive 中获取单个表的最大值、最小值和其他列的相应值以及总记录数的数据库查询

从 pyspark 数据框中获取多个(100+)列的空计数、最小值和最大值的最佳方法

如何缩小具有已知最小值和最大值的数字范围

查找熊猫索引数据帧的最小值和最大值

从Awk中的多维数组中的子数组获取最小值和最大值

使用另一个数据框中的值和日期范围创建全新的数据框