我想将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”)
答案 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