Создание различных размеров фреймов данных при группировании в dplyr и подведении итогов с помощью summerise_by_time

#r #datetime #dplyr #grouping

Вопрос:

У меня есть фрейм данных, который выглядит так:

 > 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 и суммировать переменную $DPM по месяцам в соответствии с $DateTime. 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, но это не помогло решить проблему. Я также не могу найти способ решить эту проблему, который учитывал бы две группы, область и время.

Согласно этому примеру, этот метод должен работать. Формат вывода в этом примере-это именно то, что я ищу.

Мысли?

Воспроизводимые данные:

 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)
 

Комментарии:

1. Пример воспроизводимого набора данных, пожалуйста?

Ответ №1:

Вы используете a в конце второй строки, где должна быть труба %>% dplyr . Это приводит к данной ошибке.

Комментарии:

1. Чувак, ты перепутал мой жаргон. Я использую ggplot в том же сценарии. Спасибо за очевидное место!