比较R中的日期效果不佳(相等)

时间:2019-05-21 15:36:40

标签: r date compare

我想将2列数据框与日期进行比较,并包括一列以指示日期“ A”是<=日期“ B”还是>

df <- data.frame( list (A=c("15-10-2000", "15-10-2000", "15-10-2000","20-10-2000"),                     
                        B=c("15-10-2000", "16-10-2000", "14-10-2000","19-10-2000")))

我想添加的是新列C = ( 1 , 1, 0, 0)

我尝试过:

df$C = ifelse (df$A <= df$B, 1, 0

除了“相等”比较之外,它都起作用。

我得到:C = ( 0 , 1, 0, 0)

对不起,但是在进行比较之前,我将格式更改为“日期”,但仍然无法使用

df $ A = as.Date(df $ A,format =“%d-%m-%Y”)
df $ B = as.Date(df $ B,format =“%d-%m-%Y”)

2 个答案:

答案 0 :(得分:2)

日期列是因素。您需要先将它们转换为Date类,然后进行比较

library(dplyr)

df %>%
  mutate_at(vars(A:B), as.Date, format = "%d-%m-%Y") %>%
  mutate(C = as.integer(A <= B))

#           A          B C
#1 2000-10-15 2000-10-15 1
#2 2000-10-15 2000-10-16 1
#3 2000-10-15 2000-10-14 0
#4 2000-10-20 2000-10-19 0

或者在基数R中应该是

df[1:2] <- lapply(df[1:2], as.Date, format = "%d-%m-%Y")
df$C <- as.integer(df$A <= df$B)

答案 1 :(得分:2)

您应该将因子转换为日期(如Jon Spring所指出的)。然后应该可以了

library(dplyr)
df %>% 
  mutate_all(lubridate::dmy) %>%
  mutate(C = ifelse(A<=B,1,0))

           A          B C
1 2000-10-15 2000-10-15 1
2 2000-10-15 2000-10-16 1
3 2000-10-15 2000-10-14 0
4 2000-10-20 2000-10-19 0