R 如何将每小时太阳辐射值转换为每天计算的0到1之间的每小时值
我有一个数据框df,数据是关于9个月内每小时df$Datetime太阳辐射df$辐照度的。例如:R 如何将每小时太阳辐射值转换为每天计算的0到1之间的每小时值,r,dplyr,data.table,R,Dplyr,Data.table,我有一个数据框df,数据是关于9个月内每小时df$Datetime太阳辐射df$辐照度的。例如: df<- data.frame(Datetime=c("2019-07-30 00:00:00","2019-07-30 01:00:00","2019-07-30 02:00:00","2019-07-30 03:00:00","2019-07-30 04:00:00","2019-07-30 05:00:00","2019-07-30 06:00:00","2019-07-30 07:00
df<- data.frame(Datetime=c("2019-07-30 00:00:00","2019-07-30 01:00:00","2019-07-30 02:00:00","2019-07-30 03:00:00","2019-07-30 04:00:00","2019-07-30 05:00:00","2019-07-30 06:00:00","2019-07-30 07:00:00","2019-07-30 08:00:00","2019-07-30 09:00:00","2019-07-30 10:00:00","2019-07-30 11:00:00","2019-07-30 12:00:00","2019-07-30 13:00:00","2019-07-30 14:00:00","2019-07-30 15:00:00","2019-07-30 16:00:00","2019-07-30 17:00:00","2019-07-30 18:00:00","2019-07-30 19:00:00","2019-07-30 20:00:00","2019-07-30 21:00:00"),
Irradiance=c(0,0,0,0,0,1354,8574,15698,35874,87569,148632,248254,358326,387520,312542,249874,189325,102458,59632,24879,1003,0))
df$Datetime <- as.POSIXct(df$Datetime, format="%Y-%m-%d %H:%M:%S",tz="utz")
df
Datetime Irradiance
1 2019-07-30 00:00:00 0
2 2019-07-30 01:00:00 0
3 2019-07-30 02:00:00 0
4 2019-07-30 03:00:00 0
5 2019-07-30 04:00:00 0
6 2019-07-30 05:00:00 1354
7 2019-07-30 06:00:00 8574
8 2019-07-30 07:00:00 15698
9 2019-07-30 08:00:00 35874
10 2019-07-30 09:00:00 87569
11 2019-07-30 10:00:00 148632
12 2019-07-30 11:00:00 248254
13 2019-07-30 12:00:00 358326
14 2019-07-30 13:00:00 387520
15 2019-07-30 14:00:00 312542
16 2019-07-30 15:00:00 249874
17 2019-07-30 16:00:00 189325
18 2019-07-30 17:00:00 102458
19 2019-07-30 18:00:00 59632
20 2019-07-30 19:00:00 24879
21 2019-07-30 20:00:00 1003
22 2019-07-30 21:00:00 0
然而,在我的情况下,当我的数据帧跨越一天以上,大约240天时,我不知道如何做到这一点。考虑到每天的最大辐照度,我应该如何创建一个名为LightIntensity的变量
注意:我更愿意学习使用data.table语言,但是,其他方法对我很有用。如果您想计算白天的光强,请使用ave 资料 由于问题中发布的数据仅持续一天,我将再添加5天。辐照度与第一天相似
set.seed(1234)
DT <- df$Datetime + rep(86400, nrow(df))*rep(0:4, each = nrow(df))
Irr <- round(abs(jitter(rep(df$Irradiance, 5))))
df2 <- rbind(df, data.frame(Datetime = DT, Irradiance = Irr))
rm(DT, Irr)
如果你想计算白天的光照强度,请使用ave 资料 由于问题中发布的数据仅持续一天,我将再添加5天。辐照度与第一天相似
set.seed(1234)
DT <- df$Datetime + rep(86400, nrow(df))*rep(0:4, each = nrow(df))
Irr <- round(abs(jitter(rep(df$Irradiance, 5))))
df2 <- rbind(df, data.frame(Datetime = DT, Irradiance = Irr))
rm(DT, Irr)
dplyr选项:
dplyr选项:
除以最大df$LightIntensity除以最大df$LightIntensity,这是完美的@Rui Barradas。请注意:当我复制数据帧示例df2时,我得到两倍于2019-07-30的一天,然后脚本使用具有最大辐照度的一天,两个2019-07-30中的一个获得一个小时的值,最大辐照度略低于1。但是剧本做得很好。非常感谢你,这太完美了@Rui Barradas。请注意:当我复制数据帧示例df2时,我得到两倍于2019-07-30的一天,然后脚本使用具有最大辐照度的一天,两个2019-07-30中的一个获得一个小时的值,最大辐照度略低于1。但是剧本做得很好。非常感谢你
set.seed(1234)
DT <- df$Datetime + rep(86400, nrow(df))*rep(0:4, each = nrow(df))
Irr <- round(abs(jitter(rep(df$Irradiance, 5))))
df2 <- rbind(df, data.frame(Datetime = DT, Irradiance = Irr))
rm(DT, Irr)
df %>%
group_by(as.Date(Datetime)) %>%
mutate(LightIntensity = Irradiance/max(Irradiance))