R - 如何从日期列中选择最早的日期列?

时间:2016-08-23 09:51:06

标签: r date min

我想从多个日期列中获取每行中最早日期的列。

我的数据集是这样的。

df = data.frame( x_date = as.Date( c("2016-1-3", "2016-3-5", "2016-5-5")) , y_date = as.Date( c("2016-2-2", "2016-3-1", "2016-4-4")), z_date = as.Date(c("2016-3-2", "2016-1-1", "2016-7-1")) )

+---+-----------+------------+-----------+ | | x_date | y_date | z_date | +---+-----------+------------+-----------+ |1 | 2016-01-03 | 2016-02-02 |2016-03-02 | |2 | 2016-03-05 | 2016-03-01 |2016-01-01 | |3 | 2016-05-05 | 2016-04-04 |2016-07-01 | +---+-----------+------------+-----------+

我想得到类似下面这一栏的内容。

+---+---------------+ | | earliest_date | +---+---------------+ |1 | 2016-01-03 | |2 | 2016-01-01 | |3 | 2016-04-04 | +---+---------------+

这是我的代码,但它从整个列和行输出最早的日期....

library(dplyr) df %>% dplyr::mutate(earliest_date = min(x_date, y_date, z_date))

3 个答案:

答案 0 :(得分:6)

一个选项是pmin

df %>% 
   mutate(earliest_date = pmin(x_date, y_date, z_date))
#    x_date     y_date     z_date   earliest_date
#1 2016-01-03 2016-02-02 2016-03-02    2016-01-03
#2 2016-03-05 2016-03-01 2016-01-01    2016-01-01
#3 2016-05-05 2016-04-04 2016-07-01    2016-04-04

如果我们只需要单列,则transmute是选项

df %>%
    transmute(earliest_date = pmin(x_date, y_date,z_date))

答案 1 :(得分:2)

如果您希望输出为包含行的列的数据框,则需要先转换数据集。

http://www.mypage.com/index.html?selectA=a132&selectB=b02#bestellung

答案 2 :(得分:1)

您可以apply逐行获取最短日期(因为日期已经是类日期)

apply(df, 1, min)

#[1] "2016-01-03" "2016-01-01" "2016-04-04"

或者您也可以将pmindo.call

一起使用
do.call(pmin, df)

#[1] "2016-01-03" "2016-01-01" "2016-04-04"