Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/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_Dplyr_Lubridate - Fatal编程技术网

R 基于多个时间段计算列的平均值

R 基于多个时间段计算列的平均值,r,dplyr,lubridate,R,Dplyr,Lubridate,我想知道如何计算每小时一个变量的平均值。我想每1/2小时计算一次平均值,然后每1、2、4和6小时计算一次 这是我的数据集: dput(head(R3L12, 10)) structure(list(Date = c("2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23&quo

我想知道如何计算每小时一个变量的平均值。我想每1/2小时计算一次平均值,然后每1、2、4和6小时计算一次

这是我的数据集:

dput(head(R3L12, 10))

structure(list(Date = c("2015-05-23", "2015-05-23", "2015-05-23", 
"2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", "2015-05-23", 
"2015-05-23", "2015-05-23"), Time = c("07:25:00", "07:40:00", 
"07:45:00", "09:10:00", "11:45:00", "11:55:00", "12:05:00", "12:35:00", 
"12:45:00", "13:30:00"), Turtle = structure(c(3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L), .Label = c("R3L1", "R3L11", "R3L12", 
"R3L2", "R3L4", "R3L8", "R3L9", "R4L8", "R8L1", "R8L4", "R8NAT123"
), class = "factor"), Tex = c(11.891, 12.008, 12.055, 13.219, 
18.727, 18.992, 19.477, 20.367, 20.641, 28.305), m.Tb = c(12.477, 
12.54, 12.54, 12.978, 16.362, 16.612, 17.238, 19.617, 19.993, 
24.371), m.HR = c(7.56457, 6.66759, 17.51107, 9.72277, 19.44553, 
13.07674, 28.115, 14.99467, 17.16947, 40.40479), season = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("beginning", 
"end", "middle"), class = "factor"), year = c(2015L, 2015L, 2015L, 
2015L, 2015L, 2015L, 2015L, 2015L, 2015L, 2015L), Mass = c(360L, 
360L, 360L, 360L, 360L, 360L, 360L, 360L, 360L, 360L)), row.names = c(NA, 
10L), class = "data.frame")
我希望能够计算每个日期每个时间段的结核分枝杆菌平均数。例如,对于2015-05-23,我希望每30分钟、1小时、2小时、4小时和6小时获得结核分枝杆菌的平均值。然后我想第二天再重复一遍。有时时间列中会出现“缺少”行,这是因为NA行已被删除


如果您需要澄清或有问题,请告诉我,因为我对r还是新手。

我希望这就是您想要的。由于生成的数据帧具有不同的行号,我不得不将它们存储在列表中。为此,我首先创建了一个字符向量,它包含了您想要计算平均值的所有时间跨度,然后我使用
purrr
包中的
map
函数对它们进行迭代,替换
cut
中的
breaks
参数来创建您想要的时间跨度

library(dplyr)
library(lubridate)
library(purrr)

breaks <- c("15 min", "30 min", "1 hour", "2 hour", "4 hour", "6 hour")

breaks %>%
  map(~ df %>% 
            unite("Date-Time", c("Date", "Time"), sep = " ", remove = FALSE) %>% 
            mutate(`Date-Time` = ymd_hms(`Date-Time`)) %>%
            mutate(DS = cut(`Date-Time`, breaks = .x)) %>%
            group_by(ymd(Date), DS) %>%
            summarise(avg = mean(m.Tb))) %>%
  set_names(breaks)


$`15 min`
# A tibble: 8 x 3
# Groups:   ymd(Date) [1]
  `ymd(Date)` DS                    avg
  <date>      <fct>               <dbl>
1 2015-05-23  2015-05-23 07:25:00  12.5
2 2015-05-23  2015-05-23 07:40:00  12.5
3 2015-05-23  2015-05-23 09:10:00  13.0
4 2015-05-23  2015-05-23 11:40:00  16.4
5 2015-05-23  2015-05-23 11:55:00  16.9
6 2015-05-23  2015-05-23 12:25:00  19.6
7 2015-05-23  2015-05-23 12:40:00  20.0
8 2015-05-23  2015-05-23 13:25:00  24.4

$`30 min`
# A tibble: 6 x 3
# Groups:   ymd(Date) [1]
  `ymd(Date)` DS                    avg
  <date>      <fct>               <dbl>
1 2015-05-23  2015-05-23 07:25:00  12.5
2 2015-05-23  2015-05-23 08:55:00  13.0
3 2015-05-23  2015-05-23 11:25:00  16.4
4 2015-05-23  2015-05-23 11:55:00  16.9
5 2015-05-23  2015-05-23 12:25:00  19.8
6 2015-05-23  2015-05-23 13:25:00  24.4

$`1 hour`
# A tibble: 5 x 3
# Groups:   ymd(Date) [1]
  `ymd(Date)` DS                    avg
  <date>      <fct>               <dbl>
1 2015-05-23  2015-05-23 07:00:00  12.5
2 2015-05-23  2015-05-23 09:00:00  13.0
3 2015-05-23  2015-05-23 11:00:00  16.5
4 2015-05-23  2015-05-23 12:00:00  18.9
5 2015-05-23  2015-05-23 13:00:00  24.4

$`2 hour`
# A tibble: 4 x 3
# Groups:   ymd(Date) [1]
  `ymd(Date)` DS                    avg
  <date>      <fct>               <dbl>
1 2015-05-23  2015-05-23 07:00:00  12.5
2 2015-05-23  2015-05-23 09:00:00  13.0
3 2015-05-23  2015-05-23 11:00:00  18.0
4 2015-05-23  2015-05-23 13:00:00  24.4

$`4 hour`
# A tibble: 2 x 3
# Groups:   ymd(Date) [1]
  `ymd(Date)` DS                    avg
  <date>      <fct>               <dbl>
1 2015-05-23  2015-05-23 07:00:00  12.6
2 2015-05-23  2015-05-23 11:00:00  19.0

$`6 hour`
# A tibble: 2 x 3
# Groups:   ymd(Date) [1]
  `ymd(Date)` DS                    avg
  <date>      <fct>               <dbl>
1 2015-05-23  2015-05-23 07:00:00  15.6
2 2015-05-23  2015-05-23 13:00:00  24.4
库(dplyr)
图书馆(lubridate)
图书馆(purrr)
打破%
地图(~df%>%
联合(“日期时间”,c(“日期”,“时间”),sep=“”,remove=FALSE)%>%
突变(`Date-Time`=ymd_-hms(`Date-Time`))%>%
突变(DS=cut(`Date-Time`,breaks=.x))%>%
分组人(ymd(日期),DS)%>%
总结(平均值=平均值(结核分枝杆菌))%>%
设置名称(分隔符)
$`15分钟`
#一个tibble:8x3
#组别:ymd(日期)[1]
`ymd(日期)`DS平均值
1 2015-05-23  2015-05-23 07:25:00  12.5
2 2015-05-23  2015-05-23 07:40:00  12.5
3 2015-05-23  2015-05-23 09:10:00  13.0
4 2015-05-23  2015-05-23 11:40:00  16.4
5 2015-05-23  2015-05-23 11:55:00  16.9
6 2015-05-23  2015-05-23 12:25:00  19.6
7 2015-05-23  2015-05-23 12:40:00  20.0
8 2015-05-23  2015-05-23 13:25:00  24.4
$`30分钟`
#一个tibble:6x3
#组别:ymd(日期)[1]
`ymd(日期)`DS平均值
1 2015-05-23  2015-05-23 07:25:00  12.5
2 2015-05-23  2015-05-23 08:55:00  13.0
3 2015-05-23  2015-05-23 11:25:00  16.4
4 2015-05-23  2015-05-23 11:55:00  16.9
5 2015-05-23  2015-05-23 12:25:00  19.8
6 2015-05-23  2015-05-23 13:25:00  24.4
$`1小时`
#一个tibble:5x3
#组别:ymd(日期)[1]
`ymd(日期)`DS平均值
1 2015-05-23  2015-05-23 07:00:00  12.5
2 2015-05-23  2015-05-23 09:00:00  13.0
3 2015-05-23  2015-05-23 11:00:00  16.5
4 2015-05-23  2015-05-23 12:00:00  18.9
5 2015-05-23  2015-05-23 13:00:00  24.4
$`2小时`
#一个tibble:4x3
#组别:ymd(日期)[1]
`ymd(日期)`DS平均值
1 2015-05-23  2015-05-23 07:00:00  12.5
2 2015-05-23  2015-05-23 09:00:00  13.0
3 2015-05-23  2015-05-23 11:00:00  18.0
4 2015-05-23  2015-05-23 13:00:00  24.4
$`4小时`
#一个tibble:2x3
#组别:ymd(日期)[1]
`ymd(日期)`DS平均值
1 2015-05-23  2015-05-23 07:00:00  12.6
2 2015-05-23  2015-05-23 11:00:00  19.0
$`6小时`
#一个tibble:2x3
#组别:ymd(日期)[1]
`ymd(日期)`DS平均值
1 2015-05-23  2015-05-23 07:00:00  15.6
2 2015-05-23  2015-05-23 13:00:00  24.4

我们可以使用
lubridate
中的
天花板日期

library(lubridate)
library(dplyr)
library(stringr)
R3L12 %>% 
   group_by(DS = ceiling_date(as.POSIXct(str_c(Date, Time, sep=" ")), 
         unit = '30 min' )) %>% 
   summarise(avg_30 = mean(m.Tb)) %>% 
   mutate(date = as.Date(DS))
-输出

# A tibble: 7 x 3
#  DS                  avg_30 date      
#  <dttm>               <dbl> <date>    
#1 2015-05-23 07:30:00   12.5 2015-05-23
#2 2015-05-23 08:00:00   12.5 2015-05-23
#3 2015-05-23 09:30:00   13.0 2015-05-23
#4 2015-05-23 12:00:00   16.5 2015-05-23
#5 2015-05-23 12:30:00   17.2 2015-05-23
#6 2015-05-23 13:00:00   19.8 2015-05-23
#7 2015-05-23 13:30:00   24.4 2015-05-23
#一个tible:7 x 3
#DS平均30日
#                      
#1 2015-05-23 07:30:00   12.5 2015-05-23
#2 2015-05-23 08:00:00   12.5 2015-05-23
#3 2015-05-23 09:30:00   13.0 2015-05-23
#4 2015-05-23 12:00:00   16.5 2015-05-23
#5 2015-05-23 12:30:00   17.2 2015-05-23
#6 2015-05-23 13:00:00   19.8 2015-05-23
#7 2015-05-23 13:30:00   24.4 2015-05-23

我就是这样做的,你有很多遗漏的时段,所以它不是半小时聚合的最佳输出

data\u示例
总结(总和间隔=总和(m.Tb))|>
总结(平均间隔=平均(总和间隔))
}
嵌套\u示例\u数据%
mutate(date_timer=str_c(date,Time)%>%clock::date_Time_parse(zone=“UTC”)|>
(日期)
最终数据变化(楼层30=数据>平均值(日期列=日期计时器,间隔函数=楼层30))
最终数据
#>#A tible:1 x 3
#>#按行:日期
#>日期数据下限\u 30$平均\u间隔
#>                           
#>1 2015-05-23[10 x 9]23.5

由(v2.0.0)

@akrun于2021-05-30年创建,看起来很有效,很简单,谢谢!虽然不那么重要,但有没有办法知道它使用的时间?例如,对于30分钟的平均值,我猜是从7:00-7:30、7:30-8:00等等?@Cassidy您只需要将
mutate
中的名称从
DS
更改为其他名称,即日期