【问题标题】:comparing dates in R not working well (equal)比较 R 中的日期效果不佳(相等)
【发布时间】:2019-05-21 15:36:40
【问题描述】:

我想将 2 列数据框与日期进行比较,并包含一列来指示日期“A”是

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 &lt;= 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")

【问题讨论】:

  • 如果你把你的字符串转换成日期格式会更容易,df$A = as.Date(df$A, "%d-%m-%Y"); df$B = as.Date(df$B, "%d-%m-%Y")

标签: r date compare


【解决方案1】:

日期列是因素。您需要先将它们转换为 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)

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 2010-09-06
      相关资源
      最近更新 更多