R 如何计算数据帧每分钟的中值?

R 如何计算数据帧每分钟的中值?,r,statistics,data.table,median,R,Statistics,Data.table,Median,我有一个数据帧(~15000行),如: 此外,还缺少约10行。这意味着有时候一分钟只有59秒。我不知道这是否起作用 我在网上找到了这个,但它不起作用: library(lubridate) dd[, c('Hour', 'Minute') := .(datastrom::hour(zeit), minute(zeit)) ][, .(Avg = mean(strom)), .(Hour, Minute)] 我需要每分钟的中位数。如果有人能帮我,那就太好了 预期结果: time

我有一个数据帧(~15000行),如:

此外,还缺少约10行。这意味着有时候一分钟只有59秒。我不知道这是否起作用

我在网上找到了这个,但它不起作用:

library(lubridate)
dd[, c('Hour', 'Minute') := .(datastrom::hour(zeit), minute(zeit))
][, .(Avg = mean(strom)), .(Hour, Minute)]
我需要每分钟的中位数。如果有人能帮我,那就太好了

预期结果:

time                   value
01-01-2019 08:09       5,4 (=median of all values between 08:09:00 and 08:09:59)
01-01-2019 08:10       5,8 (=median of all values between 08:10:00 and 08:10:59)
...

如果您的
时间
类似于
POSIXct
,那么以下方法应该可以工作:

with(mydata, tapply(value, cut(time, "mins"), median))

参见
?cut.POSIXt

我做了一个可复制的例子

library(data.table)
dd <- read.table(text="time                   value
'01-01-2019 08:09:25'    5,3
'01-01-2019 08:09:26'    5,5
'01-01-2019 08:10:00'    6,5
'01-01-2019 08:10:01'    5,2
'01-01-2019 08:10:02'    6,2
'01-01-2019 08:10:03'    5,4", header =TRUE)#
dd <- data.table(dd)
dd[,value:=as.numeric(gsub(",",".",value))]
dd[,day:=substr(time,1,10)]
dd[,hour:=substr(time,12,16)]
## only listing the median
dd[,list(median_value=median(value,na.rm = TRUE)),by=.(day,hour)]
## or an new data table
dd_median <- dd[,list(median_value=median(value,na.rm = TRUE)),by=.(day,hour)]
库(data.table)

dd我如何编程一个循环,以便所有八个表都一个接一个地计算

守则:

dt_M1_I <- M1_I
dt_M1_I <- data.table(dt_M1_I)
dt_M1_I[,I:=as.numeric(gsub(",",".",I))]
dt_M1_I[,day:=substr(t,1,10)]
dt_M1_I[,hour:=substr(t,12,16)]
dt_M1_I_median <- dt_M1_I[,list(median_I=median(I,na.rm = TRUE)),by=.(day,hour)]

非常感谢您的帮助

对于以上给定的数据,您希望得到什么样的输出?对不起,我需要一些帮助。。。什么是“分钟”
“分钟”
是分钟。请参见
?cut.POSIXt
:)谢谢!!如果所有不同的对象都有不同的时间跨度,这样它们的日期和时间事件就不会交叉,那么您可以为每个对象创建一个data.table,并通过
rbindlist(list(M1_I,M2_I,M3_I,M4_I,M1_,M2_,M3_,M4_))
将它们绑定在一起,然后从您的代码中运行第3-6行并对所有对象执行此操作。
dt_M1_I <- M1_I
dt_M1_I <- data.table(dt_M1_I)
dt_M1_I[,I:=as.numeric(gsub(",",".",I))]
dt_M1_I[,day:=substr(t,1,10)]
dt_M1_I[,hour:=substr(t,12,16)]
dt_M1_I_median <- dt_M1_I[,list(median_I=median(I,na.rm = TRUE)),by=.(day,hour)]
M1_I
M2_I
M3_I
M4_I
M1_U
M2_U
M3_U
M4_U