library(tidyverse)
How to compare datetime in r?
There is a date time variable in my dataset, want to use it as a condition to create a new variable, but got error message.
mydata<- mydata %>% mutate(Modified=ifelse(loaddate> '2020-05-20 14:00:00', "Updated", "not updated")
what is wrong? Thank you!
That value is a character string, not a "Date Time" object, see this example:
# This is a "character" string
class("2020-05-20 14:00:00")
#> [1] "character"
# This is a "Date Time" object
class(as.POSIXct("2020-05-20 14:00:00"))
#> [1] "POSIXct" "POSIXt"
Created on 2020-05-26 by the reprex package (v0.3.0)
If you need more specific help, please provide a proper REPRoducible EXample (reprex) illustrating your issue.
I am going to define a condition operation, how to do that? for example:
newdata<- newdata %>% mutate(Positive=ifelse(update> '2020-05-29 08:10', "Positive", "Negative")
Thank you!
You are not providing a reproducible example, please read the guide on the link I gave you before and try to make one.
mydata<- read.table(text="ID Lastupdate
A '2020-04-29 08:02:00'
B '2020-05-20 09:04:12'
C '2020-05-18 10:23:14'
D '2020-05-06 12:00:45'
E '2020-05-10 13:21:45' ", header=T)
How about use this sample data to create a new variable updatecondition:
mydata<- mydata %>% mutate(updatecondition=ifelse(Lastupdate > 2020-05-10 08:00:00, 'Yes', 'No')
Thank you!
As I said you have to use dates instead of characters, see this example
library(dplyr)
mydata<- read.table(text="ID Lastupdate
A '2020-04-29 08:02:00'
B '2020-05-20 09:04:12'
C '2020-05-18 10:23:14'
D '2020-05-06 12:00:45'
E '2020-05-10 13:21:45' ", header=T)
mydata %>%
mutate(Lastupdate = as.POSIXct(Lastupdate),
updatecondition = ifelse(Lastupdate > as.POSIXct("2020-05-10 08:00:00"), 'Yes', 'No'))
#> ID Lastupdate updatecondition
#> 1 A 2020-04-29 08:02:00 No
#> 2 B 2020-05-20 09:04:12 Yes
#> 3 C 2020-05-18 10:23:14 Yes
#> 4 D 2020-05-06 12:00:45 No
#> 5 E 2020-05-10 13:21:45 Yes
Created on 2020-05-29 by the reprex package (v0.3.0)
Thank you very much for your help! my dataset has many records, part of assigned value is wrong, should be "Yes" instead of "NO", don't know why.
I just printed the datetime, there is a UTC included in the value, like '2020-04-29 08:02:00 UTC', can this also use as.POSIXct to convert? why part of assigned value for the new variable is wrong? Thank you!
Please provide a reproducible example of your issue, otherwise, I don't have enough information to help you.
dataset are not allowed to upload here, if copy and paste, format changed
The dput() function is used to make a text representation of R data. Often head() is used to limit the portion of the data passed in.
Thank you! I will try......
Here is the data:
structure(list(ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89), Update = structure(c(1590702578,
1589206396, 1589805622, 1590665185, 1590623139, 1585246983, 1590741938,
1590740931, 1590738637, 1590305832, 1590665713, 1590671225, 1590685086,
1588148977, 1590654068, 1590593567, 1590736985, 1585247220, 1585247230,
1590669904, 1590655528, 1590741098, 1590586486, 1590594852, 1587615463,
1585247359, 1590722190, 1590726094, 1585247401, 1590699799, 1585247420,
1586499572, 1585247447, 1590738267, 1590718523, 1590714443, 1590703076,
1585565823, 1590741475, 1585565962, 1590671383, 1590687194, 1590742656,
1586534488, 1590667665, 1590666826, 1590661791, 1587985666, 1590510810,
1590594535, 1586258493, 1589963558, 1590511622, 1588244652, 1590679041,
1586364925, 1590681897, 1586882653, 1590659784, 1585568768, 1590664003,
1588145315, 1585568774, 1590660698, 1590693825, 1590684888, 1585568837,
1590737011, 1587716271, 1590667290, 1590589902, 1590678225, 1585569202,
1585569229, 1585569273, 1590736573, 1590741431, 1590674289, 1590741439,
1589217448, 1590580103, 1590664418, 1590592445, 1590671513, 1590682850,
1590695504, 1590594533, 1589808203, 1590584700), class = c("POSIXct",
"POSIXt"), tzone = "UTC")), row.names = c(NA, -89L), class = c("tbl_df",
"tbl", "data.frame"))
input<- input %>% mutate(Update=as.POSIXct(Update),UpdateStatus=ifelse(Update > '2020-05-28 09:00:00',"Yes","No"))
Which part? Can you give us a specific example of this?
Update between '2020-05-28 09:00:00' and '2020-05-28 12:00:00' should be "Yes", but some of them was assigned "No".
I can't reproduce your issue, If I run the code with your sample data everything above '2020-05-28 09:00:00' is assigned "Yes".
As I said, please read the reprex guide I gave you and try to make a proper reproducible example that actually shows your issue.
Please forget it, probably is my computer system problem.
UTC is 5 hours ahead of CDT, after adjusting the cutoff of comparison, issue was solved. Thank you.
probably because you havent cast '2020-05-28 09:00:00' to a POSIXct class. so they are being compared as character strings I would guess
I did, but the system treat '2020-05-28 09:00:00' as CDT, others from my dataset as UTC.
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.