首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R-如何从日期列中选择最早的日期列?

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

Stack Overflow用户
提问于 2016-08-23 17:51:06
回答 3查看 9.5K关注 0票数 3

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

我的数据集是这样的。

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))

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-23 18:05:10

一种选择是pmin

代码语言:javascript
复制
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就是一个选项

代码语言:javascript
复制
df %>%
    transmute(earliest_date = pmin(x_date, y_date,z_date))
票数 9
EN

Stack Overflow用户

发布于 2016-08-23 17:55:46

您可以按行apply以获取日期的最小值(因为日期已经属于date类)

代码语言:javascript
复制
apply(df, 1, min)

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

或者,您也可以在do.call中使用pmin

代码语言:javascript
复制
do.call(pmin, df)

#[1] "2016-01-03" "2016-01-01" "2016-04-04"
票数 2
EN

Stack Overflow用户

发布于 2016-08-23 17:57:26

如果您希望输出的数据框具有行中的列,则需要首先转换数据集。

代码语言:javascript
复制
library(reshape2)
melt(df) %>% group_by(variable) %>% summarize(earliest_date = min(value))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39097867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档