如何通过对时间值应用条件来计算R中数据帧的聚合统计信息?
我在做气候数据分析。在R中加载文件后,我的兴趣是根据一天中的小时数对数据进行子集 对于时间分析,如果我们的兴趣是处理小时数,我们可以使用$hour和存储时间向量的变量 我想将一天中每小时的数据子集为365天,然后在一年中的某个特定时间取数据的平均值。假设我有兴趣在12:OO PM取一年的辐射/风速等值,然后取这些值的平均值,以获得所需的结果 我知道如何根据条件对数据帧进行子集划分。例如,如果我的数据在一个叫做data的矩阵中,包含两行,比如说时间和风速,我感兴趣的是辐照B不为零的数据子集行。我们可以使用以下代码来实现这一点如何通过对时间值应用条件来计算R中数据帧的聚合统计信息?,r,datetime,dataframe,grouping,aggregate,R,Datetime,Dataframe,Grouping,Aggregate,我在做气候数据分析。在R中加载文件后,我的兴趣是根据一天中的小时数对数据进行子集 对于时间分析,如果我们的兴趣是处理小时数,我们可以使用$hour和存储时间向量的变量 我想将一天中每小时的数据子集为365天,然后在一年中的某个特定时间取数据的平均值。假设我有兴趣在12:OO PM取一年的辐射/风速等值,然后取这些值的平均值,以获得所需的结果 我知道如何根据条件对数据帧进行子集划分。例如,如果我的数据在一个叫做data的矩阵中,包含两行,比如说时间和风速,我感兴趣的是辐照B不为零的数据子集行。我们
my_data <- subset(data, data[,1]>0)
my_数据0)
但是现在为了处理时间列中的小时值,时间列是存储在数据中的一个变量,如何对时间值进行子集
我的数据如下所示:
我希望我在这个问题上讲得有道理
提前谢谢 这里有一个可能的解决方案。您可以使用
格式(df$time,'%H')
创建一个小时分组,因此我们只获得每个时段的小时数,然后我们可以简单地按此新列分组,并计算每组的平均值
df = data.frame(time=seq(Sys.time(),Sys.time()+2*60*60*24,by='hour'),val=sample(seq(5),49,replace=T))
library(dplyr)
df %>% mutate(hour=format(df$time,'%H')) %>%
group_by(hour) %>%
summarize(mean_val = mean(val))
要首先对非零值进行子集划分,可以执行以下操作之一:
df = subset(df,val!=0)
或使用以下命令启动dplyr链:
df %>% filter(df$val!=0)
希望这有帮助
df
如下所示:
time val
1 2018-01-31 12:43:33 4
2 2018-01-31 13:43:33 2
3 2018-01-31 14:43:33 2
4 2018-01-31 15:43:33 3
5 2018-01-31 16:43:33 3
6 2018-01-31 17:43:33 1
7 2018-01-31 18:43:33 2
8 2018-01-31 19:43:33 4
... ... ... ...
以及输出:
# A tibble: 24 x 2
hour mean_val
<chr> <dbl>
1 00 3.50
2 01 3.50
3 02 4.00
4 03 2.50
5 04 3.00
6 05 2.00
.... ....
#一个tible:24 x 2
小时平均值
1 00 3.50
2 01 3.50
3 02 4.00
4 03 2.50
5 04 3.00
6 05 2.00
.... ....
这假设您的
time
列已经是类POSIXct
,否则您必须首先使用例如as.POSIXct(x,格式=“%Y-%m-%d%H:%m:%S”)将其转换为类。
谢谢您的回复。有没有使用subset()函数的方法?正如我提到的?@Jawairia,是的,我添加了两种可能的选择。希望有帮助!