我有一个数据框 df,其中包含 DateTimeUTC 列。
ID DateTimeUTC
A 12/4/2019 11:30:30 PM
A 12/4/2019 11:30:30 PM
B 12/5/2019 11:30:30 PM
B 12/5/2019 11:30:30 PM
B 12/5/2019 11:30:30 PM
我想进行过滤,以便 DateTimeUTC 仅显示 2019 年 12 月 5 日以来的日期,结果如下:
ID DateTimeUTC
B 12/5/2019 11:30:30 PM
B 12/5/2019 11:30:30 PM
B 12/5/2019 11:30:30 PM
我尝试过这个命令,但没有成功:
library('dplyr')
library('lubridate')
data %>% filter as.Date(DateTimeUTC == "2019-12-05")
我想要 2019 年 12 月 5 日的所有日期,包括时间(小时、分钟和秒) 这可能吗?
最佳答案
此处,“DateTimeUTC”采用不同的格式。将列转换为DateTime类(好像格式是月-日-年-时-分-秒),并用 as.Date
删除时间,然后进行比较 ( ==
)
library(dplyr)
library(lubridate)
data %>%
filter(as.Date(mdy_hms(DateTimeUTC)) == "2019-12-05")
# ID DateTimeUTC
#1 B 12/5/2019 11:30:30 PM
#2 B 12/5/2019 11:30:30 PM
#3 B 12/5/2019 11:30:30 PM
在OP的代码中,as.Date
应用于逻辑向量,无论如何都是 FALSE
因为它正在将原始格式与不同的格式进行比较,这将导致执行代码失败,即
"12/4/2019 11:30:30 PM" == "2019-12-05"
#[1] FALSE
包装as.Date
这会导致错误
as.Date("12/4/2019 11:30:30 PM" == "2019-12-05")
Error in as.Date.default("12/4/2019 11:30:30 PM" == "2019-12-05") :
do not know how to convert '"12/4/2019 11:30:30 PM" == "2019-12-05"' to class “Date”
数据
data <- structure(list(ID = c("A", "A", "B", "B", "B"),
DateTimeUTC = c("12/4/2019 11:30:30 PM",
"12/4/2019 11:30:30 PM", "12/5/2019 11:30:30 PM", "12/5/2019 11:30:30 PM",
"12/5/2019 11:30:30 PM")), class = "data.frame", row.names = c(NA,
-5L))
关于r - 过滤到特定列中的特定日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634172/