我有一个数据文件,它有两列,日期和时间,我已经将它们转换为R中的日期和时间和葡萄糖列(如下所示)。数据每5分钟提供一次,我正在尝试获得超过24小时的平均值,然后从上午11点到上午6点和上午6点到晚上11点
我不知道如何编写代码来获取这些数据。我尝试了apply.daily语法来获得24小时的平均值,但它给了我一个错误。
数据示例:
Datetime Glucose
2018-03-07 23:01:04 154
2018-03-07 23:06:04 235
2018-03-07 23:11:04 232
2018-03-07 23:16:04 144
2018-03-07 23:21:04 134
2018-03-07 23:26:04 107
2018-03-07 23:31:04 108
2018-03-07 23:36:04 122
2018-03-07 23:41:04 143
2018-03-07 23:46:04 113
2018-03-07 23:51:04 115
2018-03-07 23:56:04 116
2018-03-08 00:01:04 117
2018-03-08 00:06:04 117
2018-03-08 00:11:04 114
2018-03-08 00:16:04 109发布于 2019-01-03 04:23:07
data.table方法(带有自定义样本数据)
您可能必须更改定义周期的代码,因为您(我猜?)希望periode 23-06在第二天使用23到06 ...
示例数据
library( data.table )
#create sample data
dt <- fread("Datetime Glucose
2018-03-07T22:01:04 154
2018-03-07T22:06:04 235
2018-03-07T22:11:04 232
2018-03-07T23:16:04 144
2018-03-07T23:21:04 134
2018-03-07T3:26:04 107
2018-03-07T23:31:04 108
2018-03-07T23:36:04 122
2018-03-07T23:41:04 143
2018-03-07T23:46:04 113
2018-03-07T23:51:04 115
2018-03-07T23:56:04 116
2018-03-08T00:01:04 117
2018-03-08T00:06:04 117
2018-03-08T00:11:04 114
2018-03-08T00:16:04 109", header = TRUE)
dt[ , Datetime := as.POSIXct( Datetime, format = "%Y-%m-%dT%H:%M:%S" ) ]代码
#create period 6-23 and 23-6
dt[ , period := ifelse( hour( Datetime ) >= 23 | hour( Datetime ) < 6 , "eleven-six", "six-eleven" )]
#daily mean
dt[, .( mean.Glucose = mean( Glucose) ), by = .( day = as.Date( Datetime, tz = "" ) ) ][]
# day mean.Glucose
# 1: 2018-03-07 143.5833
# 2: 2018-03-08 114.2500
#mean per period
dt[, .( mean.Glucose = mean( Glucose) ), by = .( day = as.Date( Datetime, tz = "" ), period ) ][]
# day period mean.Glucose
# 1: 2018-03-07 six-eleven 207.0000
# 2: 2018-03-07 eleven-six 122.4444
# 3: 2018-03-08 eleven-six 114.2500https://stackoverflow.com/questions/54012201
复制相似问题