r - 如何将每小时太阳辐射值转换为每天计算的 0 到 1 之间的每小时值
问题描述
我有一个数据框,其中包含9 个月内df
每小时 ( df$Datetime
) 太阳辐照 ( ) 的数据。df$Irradiance
举个例子:
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
我想创建一个新变量LightIntensity
,每天的范围在 0 到 1 之间。辐照度最大的小时,新变量的新值将是 1,而对于没有辐照度的小时,新值将是 0。棘手的一点是辐照度在一年中会发生变化,所以我需要LightIntensity
每天计算每小时。
下面有一个我期望的例子。在这种情况下,我只是将每小时辐照度 ( df$Datetime
) 除以当天的最大辐照度 ( 387520
)。
df$LightIntensity <- df$Irradiance/387520
df
Datetime Irradiance LightIntensity
1 2019-07-30 00:00:00 0 0.000000000
2 2019-07-30 01:00:00 0 0.000000000
3 2019-07-30 02:00:00 0 0.000000000
4 2019-07-30 03:00:00 0 0.000000000
5 2019-07-30 04:00:00 0 0.000000000
6 2019-07-30 05:00:00 1354 0.003494013
7 2019-07-30 06:00:00 8574 0.022125310
8 2019-07-30 07:00:00 15698 0.040508877
9 2019-07-30 08:00:00 35874 0.092573287
10 2019-07-30 09:00:00 87569 0.225972853
11 2019-07-30 10:00:00 148632 0.383546656
12 2019-07-30 11:00:00 248254 0.640622419
13 2019-07-30 12:00:00 358326 0.924664533
14 2019-07-30 13:00:00 387520 1.000000000
15 2019-07-30 14:00:00 312542 0.806518373
16 2019-07-30 15:00:00 249874 0.644802849
17 2019-07-30 16:00:00 189325 0.488555429
18 2019-07-30 17:00:00 102458 0.264394096
19 2019-07-30 18:00:00 59632 0.153881090
20 2019-07-30 19:00:00 24879 0.064200557
21 2019-07-30 20:00:00 1003 0.002588254
22 2019-07-30 21:00:00 0 0.000000000
但是,当我的数据框跨越一天以上(在我的情况下,大约 240 天)时,我不知道该怎么做。LightIntensity
考虑到每天的最大辐照度,我应该如何创建一个名为的变量?
注意:我更愿意学习用data.table
语言来做,但是,其他方法对我有用。
解决方案
一个dplyr
选项:
df %>%
group_by(as.Date(Datetime)) %>%
mutate(LightIntensity = Irradiance/max(Irradiance))
推荐阅读
- linux - wget URL中的多括号扩展
- python - 在 Amazon Redshift 中创建 Python 2.7 UDF 以在 Postgres 上执行
- leaflet - 在 Wikidata 查询服务中排序地图图例项
- php - 如何删除 .htaccess 中的 Google Adwords gclid 查询字符串?
- javascript - 如何从另一个上层目录快速提供静态文件?
- c++ - C++ - thread_local 向量导致 MinGW 上的 join() 崩溃
- android - “android.view.View 已弃用” - 还有什么要使用或如何修复?
- c++ - C ++:(不重复)积分静态成员初始化(不只是声明!)在类中导致链接器错误,为什么?
- django - 使用modelform时视图不显示
- dialogflow-es - 如何使用他们的 REST API 在 DialogFlow 上创建机器人?