Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将每小时太阳辐射值转换为每天计算的0到1之间的每小时值_R_Dplyr_Data.table - Fatal编程技术网

R 如何将每小时太阳辐射值转换为每天计算的0到1之间的每小时值

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,数据是关于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: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))