R根据日期值对大数据框进行子集化
R subsetting a big dataframe based on date values
具有以下结构的数据框:'data.frame':4371 obs。 6 个变量:
"$ tg : num 0.0403 0.0404 0.0404 0.0404 0.0405 ...
$ date : Factor w/ 4371 levels "2/20/2020 10:00",..: 841 842 843 844 845 846 847 848 849 850 ...
$ lgp_bar: int 497 497 497 497 497 497 497 497 494 494 ...
$ lgt : num 87.8 87.8 87.8 87.8 87.8 ...
$ ugp_bar: int 451 451 451 451 451 451 451 450 447 447 ...
$ ugt : num 71.9 71.9 71.9 71.9 71.9 ..."
我必须在某些日期之间对这个数据框进行子集化。从 2/24/2020 17:00 到 2/26/2020 02:00
作为使用 dtaes 数据类型的新手。我无法完成这个简单的任务。我试过遵循代码但没有成功。凭直觉,我需要 2 分钟才能在 excel 电子表格中完成这项任务。
humm<-read.csv("book1.csv", header = TRUE);
humm$datenumber<-as_datetime(humm$date)
dts<-as.character(cbind("02/22/2020 02:00","02/23/20 10:00"))
hummfilter <- subset(humm, humm$date >= dts[1]) # || date <= dts[2])
hummfilter<-as.data.frame(humm[humm$date>=dts[1]|humm$date<=dts[2],],na.rm=TRUE)
您可以将 date
列转换为 POSIXct
,然后 subset
。
你可以使用 base R 来做到这一点:
humm$date <- as.POSIXct(humm$date, format = '%m/%d/%Y %H:%M')
subset(humm, date >= as.POSIXct('02/24/2020 17:00', format = '%m/%d/%Y %H:%M', tz = 'GMT') &
date <= as.POSIXct('02/26/2020 02:00', format = '%m/%d/%Y %H:%M', tz = 'GMT'))
或dplyr
和lubridate
:
library(dplyr)
library(lubridate)
humm %>%
mutate(date = mdy_hm(date)) %>%
filter(between(date, mdy_hm('02/24/2020 07:00'), mdy_hm('02/26/2020 02:00')))
具有以下结构的数据框:'data.frame':4371 obs。 6 个变量:
"$ tg : num 0.0403 0.0404 0.0404 0.0404 0.0405 ...
$ date : Factor w/ 4371 levels "2/20/2020 10:00",..: 841 842 843 844 845 846 847 848 849 850 ...
$ lgp_bar: int 497 497 497 497 497 497 497 497 494 494 ...
$ lgt : num 87.8 87.8 87.8 87.8 87.8 ...
$ ugp_bar: int 451 451 451 451 451 451 451 450 447 447 ...
$ ugt : num 71.9 71.9 71.9 71.9 71.9 ..."
我必须在某些日期之间对这个数据框进行子集化。从 2/24/2020 17:00 到 2/26/2020 02:00 作为使用 dtaes 数据类型的新手。我无法完成这个简单的任务。我试过遵循代码但没有成功。凭直觉,我需要 2 分钟才能在 excel 电子表格中完成这项任务。
humm<-read.csv("book1.csv", header = TRUE);
humm$datenumber<-as_datetime(humm$date)
dts<-as.character(cbind("02/22/2020 02:00","02/23/20 10:00"))
hummfilter <- subset(humm, humm$date >= dts[1]) # || date <= dts[2])
hummfilter<-as.data.frame(humm[humm$date>=dts[1]|humm$date<=dts[2],],na.rm=TRUE)
您可以将 date
列转换为 POSIXct
,然后 subset
。
你可以使用 base R 来做到这一点:
humm$date <- as.POSIXct(humm$date, format = '%m/%d/%Y %H:%M')
subset(humm, date >= as.POSIXct('02/24/2020 17:00', format = '%m/%d/%Y %H:%M', tz = 'GMT') &
date <= as.POSIXct('02/26/2020 02:00', format = '%m/%d/%Y %H:%M', tz = 'GMT'))
或dplyr
和lubridate
:
library(dplyr)
library(lubridate)
humm %>%
mutate(date = mdy_hm(date)) %>%
filter(between(date, mdy_hm('02/24/2020 07:00'), mdy_hm('02/26/2020 02:00')))