Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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中数据帧的聚合统计信息?_R_Datetime_Dataframe_Grouping_Aggregate - Fatal编程技术网

如何通过对时间值应用条件来计算R中数据帧的聚合统计信息?

如何通过对时间值应用条件来计算R中数据帧的聚合统计信息?,r,datetime,dataframe,grouping,aggregate,R,Datetime,Dataframe,Grouping,Aggregate,我在做气候数据分析。在R中加载文件后,我的兴趣是根据一天中的小时数对数据进行子集 对于时间分析,如果我们的兴趣是处理小时数,我们可以使用$hour和存储时间向量的变量 我想将一天中每小时的数据子集为365天,然后在一年中的某个特定时间取数据的平均值。假设我有兴趣在12:OO PM取一年的辐射/风速等值,然后取这些值的平均值,以获得所需的结果 我知道如何根据条件对数据帧进行子集划分。例如,如果我的数据在一个叫做data的矩阵中,包含两行,比如说时间和风速,我感兴趣的是辐照B不为零的数据子集行。我们

我在做气候数据分析。在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,是的,我添加了两种可能的选择。希望有帮助!