сравнение дат в R не работает хорошо (равно) - PullRequest
0 голосов
/ 21 мая 2019

Я хочу сравнить два столбца данных с датами и включить один столбец, чтобы указать, являются ли даты "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)

извините, но перед сравнением я изменил формат на Date и все еще не работает

df $ A = as.Date (df $ A, формат = "% d-% m-% Y")
df $ B = as.Date (df $ B, формат = "% d-% m-% Y")

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Вы должны преобразовать коэффициенты в даты (как отметил Джон Спринг).Тогда должно работать

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
2 голосов
/ 21 мая 2019

Столбцы даты являются факторами. Вам нужно сначала преобразовать их в класс 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...