我有一个包含两个变量的数据框: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))
}
它不起作用。有任何想法吗?
答案 0 :(得分:1)
更好的可重复数据。否则,答案可能就此消失了。
无论如何,如果理解正确,你希望col3成为更晚的日期。我在dplyr
和tidyverse
使用了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