我想从多个日期列中获取每行中最早日期的列。
我的数据集是这样的。
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))
发布于 2016-08-23 18:05:10
一种选择是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))发布于 2016-08-23 17:55:46
您可以按行apply以获取日期的最小值(因为日期已经属于date类)
apply(df, 1, min)
#[1] "2016-01-03" "2016-01-01" "2016-04-04"或者,您也可以在do.call中使用pmin
do.call(pmin, df)
#[1] "2016-01-03" "2016-01-01" "2016-04-04"发布于 2016-08-23 17:57:26
如果您希望输出的数据框具有行中的列,则需要首先转换数据集。
library(reshape2)
melt(df) %>% group_by(variable) %>% summarize(earliest_date = min(value))https://stackoverflow.com/questions/39097867
复制相似问题