使用Var1或Var2创建列

时间:2018-04-23 11:44:08

标签: r date dataframe

我有一个包含两个变量的数据框:date1和date2。我想创建一个显示最新日期的第三列。

我试过了:

首先我创建第三个变量

df$Column3 <-"2011-11-10"

然后我定义如何选择值:

df$Column3  <-  for (i in seq(1, 10))
  {df[i,]$Column3 <-max(c(df[i,]$Date1,df[i,]$Date2))
}

它不起作用。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

更好的可重复数据。否则,答案可能就此消失了。

无论如何,如果理解正确,你希望col3成为更晚的日期。我在dplyrtidyverse使用了lubridate

一些数据:

Column1 <- ymd(c("2011-11-09", "2011-11-10", "2011-11-12"))
Column2 <- ymd(c("2011-11-10", "2011-11-10", "2011-11-11"))
df <- data.frame(Column1, Column2)

# Add 3rd column
library(tidyverse)
library(lubridate)

df <- df %>% 
    mutate(Column3 = if_else(Column2>Column1, Column2, Column1))

并且第3列应该是两者中的较晚者:

     Column1    Column2    Column3
  2011-11-09 2011-11-10 2011-11-10
  2011-11-10 2011-11-10 2011-11-10
  2011-11-12 2011-11-11 2011-11-12

答案 1 :(得分:0)

首先需要将Date1和Date2列转换为日期格式,否则R只是将它们作为常规字符读取:

df <- data.frame(Date1 = c("2011-11-10", "2012-10-23", "2009-09-09"), 
             Date2 = c("2002-07-06", "2014-10-13", "2001-08-07"))

df$Date1 <- as.Date(df$Date1)
df$Date2 <- as.Date(df$Date2)

然后你可以使用apply函数取最大值:

df$LatestDate <- apply(df[,1:2], 1, max)
df


     Date1      Date2  LatestDate
1 2011-11-10 2002-07-06 2011-11-10
2 2012-10-23 2014-10-13 2014-10-13
3 2009-09-09 2001-08-07 2009-09-09