用于创建具有数据框中每个日期的最小值和最大值的表的函数
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 中获取单个表的最大值、最小值和其他列的相应值以及总记录数的数据库查询