在 dplyr 中分组并使用 summerise_by_time 进行汇总时创建不同的数据帧大小
Creating different dataframe sizes when grouping in dplyr and summerising with summerise_by_time
我有一个如下所示的数据框:
> head(subppm)
File ChunkEnd DPM Nall MinsOn area station deployment cpod
1 File1.CP3 11/4/2014 00:00 0 287 1 FB FB1 FB1Ha 917
2 File2.CP3 11/4/2014 00:01 0 48 1 FB FB1 FB1Ha 917
3 File3.CP3 11/4/2014 00:02 0 57 1 FB FB1 FB1Ha 917
4 File4.CP3 11/4/2014 00:03 0 44 1 FB FB1 FB1Ha 917
5 File5.CP3 11/4/2014 00:04 0 20 1 FB FB1 FB1Ha 917
6 File6.CP3 11/4/2014 00:05 0 9 1 FB FB1 FB1Ha 917
DateTime
1 2014-04-11 00:00:00
2 2014-04-11 00:00:01
3 2014-04-11 00:00:02
4 2014-04-11 00:00:03
5 2014-04-11 00:00:04
6 2014-04-11 00:00:05
> sapply(subppm,class)
$File
[1] "character"
$ChunkEnd
[1] "character"
$DPM
[1] "integer"
$Nall
[1] "integer"
$MinsOn
[1] "integer"
$area
[1] "character"
$station
[1] "character"
$deployment
[1] "character"
$cpod
[1] "character"
$DateTime
[1] "POSIXct" "POSIXt"
我试图通过 $area 变量对这些变量进行分组,并根据 $DateTime 按月对 $DPM 变量求和。 DPM 是 0/1,所以将所有 1 相加可以让我了解每月有多少分钟有数据。为此,我正在使用 dplyr 和 timetk。
histData=subppm %>%
group_by(area)+
summarise_by_time(.data = subppm,
.date_var = DateTime,
.by ='month',
value = sum(DPM, na.rm = TRUE)
)
Error in Ops.data.frame(subppm %>% group_by(area), summarise_by_time(.data = subppm, :
‘+’ only defined for equally-sized data frames
这会产生上述错误。问题是,我看不到创建相同大小的数据框的方法。我是用区域来分组的,但是我们在不同的时间收集了不同区域的数据。我试过删除 nas,但这对解决问题没有帮助。我似乎也找不到解决这个问题的方法,同时考虑了两个分组,区域和时间。
根据 this 示例,此方法应该有效。这个例子中的输出格式正是我要找的。
想法?
可重现的数据:
dates1=seq(from = as.Date('2019-01-01 00:00'), to = as.Date('2019-07-10 00:00'), by = 1)
dates2=seq(from = as.Date('2019-05-01 00:00'), to = as.Date('2019-10-10 00:00'), by = 1)
dates3=seq(from = as.Date('2019-03-01 00:00'), to = as.Date('2019-07-31 00:00'), by = 1)
data1=data.frame(area='group1', dates=dates1)
data2=data.frame(area='group2', dates=dates2)
data3=data.frame(area='group3', dates=dates3)
data1$DPM=rbinom(n=nrow(data1), size=1, prob=0.05)
data2$DPM=rbinom(n=nrow(data2), size=1, prob=0.05)
data3$DPM=rbinom(n=nrow(data3), size=1, prob=0.05)
data=rbind(data1,data2,data3)
您在第二行的末尾使用了 +
,那里应该有一个 dplyr 管道 %>%
。这会产生给定的错误。
我有一个如下所示的数据框:
> head(subppm)
File ChunkEnd DPM Nall MinsOn area station deployment cpod
1 File1.CP3 11/4/2014 00:00 0 287 1 FB FB1 FB1Ha 917
2 File2.CP3 11/4/2014 00:01 0 48 1 FB FB1 FB1Ha 917
3 File3.CP3 11/4/2014 00:02 0 57 1 FB FB1 FB1Ha 917
4 File4.CP3 11/4/2014 00:03 0 44 1 FB FB1 FB1Ha 917
5 File5.CP3 11/4/2014 00:04 0 20 1 FB FB1 FB1Ha 917
6 File6.CP3 11/4/2014 00:05 0 9 1 FB FB1 FB1Ha 917
DateTime
1 2014-04-11 00:00:00
2 2014-04-11 00:00:01
3 2014-04-11 00:00:02
4 2014-04-11 00:00:03
5 2014-04-11 00:00:04
6 2014-04-11 00:00:05
> sapply(subppm,class)
$File
[1] "character"
$ChunkEnd
[1] "character"
$DPM
[1] "integer"
$Nall
[1] "integer"
$MinsOn
[1] "integer"
$area
[1] "character"
$station
[1] "character"
$deployment
[1] "character"
$cpod
[1] "character"
$DateTime
[1] "POSIXct" "POSIXt"
我试图通过 $area 变量对这些变量进行分组,并根据 $DateTime 按月对 $DPM 变量求和。 DPM 是 0/1,所以将所有 1 相加可以让我了解每月有多少分钟有数据。为此,我正在使用 dplyr 和 timetk。
histData=subppm %>%
group_by(area)+
summarise_by_time(.data = subppm,
.date_var = DateTime,
.by ='month',
value = sum(DPM, na.rm = TRUE)
)
Error in Ops.data.frame(subppm %>% group_by(area), summarise_by_time(.data = subppm, :
‘+’ only defined for equally-sized data frames
这会产生上述错误。问题是,我看不到创建相同大小的数据框的方法。我是用区域来分组的,但是我们在不同的时间收集了不同区域的数据。我试过删除 nas,但这对解决问题没有帮助。我似乎也找不到解决这个问题的方法,同时考虑了两个分组,区域和时间。
根据 this 示例,此方法应该有效。这个例子中的输出格式正是我要找的。
想法?
可重现的数据:
dates1=seq(from = as.Date('2019-01-01 00:00'), to = as.Date('2019-07-10 00:00'), by = 1)
dates2=seq(from = as.Date('2019-05-01 00:00'), to = as.Date('2019-10-10 00:00'), by = 1)
dates3=seq(from = as.Date('2019-03-01 00:00'), to = as.Date('2019-07-31 00:00'), by = 1)
data1=data.frame(area='group1', dates=dates1)
data2=data.frame(area='group2', dates=dates2)
data3=data.frame(area='group3', dates=dates3)
data1$DPM=rbinom(n=nrow(data1), size=1, prob=0.05)
data2$DPM=rbinom(n=nrow(data2), size=1, prob=0.05)
data3$DPM=rbinom(n=nrow(data3), size=1, prob=0.05)
data=rbind(data1,data2,data3)
您在第二行的末尾使用了 +
,那里应该有一个 dplyr 管道 %>%
。这会产生给定的错误。