[英]Function to create a table with min and max of each date in the dataframe
I am new to R and I am trying to create a function that would create a new dataframe showing min and max of each Date´s column from the original dataframe. I have a dataframe (df) with different types of variables (numeric, dates, character...).I would like to create a function that will select only Date columns (Date1,Date2,Date3,Date4, number of columns can vary ...)。並創建一個新的 dataframe 向我顯示每個 Date 列的最小值和最大值(請參閱下面的 output)。
輸入 dataframe 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 |
Output dataframe 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 |
感謝您的建議
可以通過dplyr
package 或正則表達式來完成。 我們首先創建示例數據框:
# 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
package
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)))]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.