R - 如何从日期栏中选择最早的日期列?
我想从多个日期列中获取每行中具有最早日期的列。R - 如何从日期栏中选择最早的日期列?
我的数据集是这样的。
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))
一种选择是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))
可以apply
横行来获得日期的最小值(因为日期已经是日期类)
apply(df, 1, min)
#[1] "2016-01-03" "2016-01-01" "2016-04-04"
或者你也可以使用pmin
与do.call
do.call(pmin, df)
#[1] "2016-01-03" "2016-01-01" "2016-04-04"
你需要,如果你所要的输出与行列的数据帧转换数据先设置。
library(reshape2)
melt(df) %>% group_by(variable) %>% summarize(earliest_date = min(value))
谢谢你的提示,我已经忘记了这一点。 –
这就是我想要做的! [pmin()](http://stackoverflow.com/questions/28070878/r-use-min-within-dplyrmutate)我需要使用的功能。非常感谢你。 – Toshihiro
此外,当我尝试使用pmin()处理缺少值的行时,我需要使用ifelse()来处理NA。但是,在那个时候,Date类自动转换为double类型(确切地说,Date类信息已被删除)。为了保持Date的类信息,我尝试了safe.ifelse()提出[这里](http://stackoverflow.com/questions/6668963/how-to-prevent-ifelse-from-turning-date-objects-into-numeric对象),它工作正常。 – Toshihiro
@Toshihiro'pmin'中有'na.rm'参数。默认情况下,它是'FALSE',即'pmin(x_date,y_date,z_date,na.rm = TRUE)' – akrun