Групповая отметка времени данных в г - PullRequest
0 голосов
/ 22 марта 2019

Я новичок в R и мне нужна помощь в следующем. У меня есть эти данные:

  Time Temperature
  4.460672    96.32332
 15.542545    96.32332
 16.750386    96.32332
 38.709795    96.32332
 39.952442    96.32332
 41.320898    96.32332
 55.375259    96.32332
 61.855321   100.47791
 66.464590   100.47791
 66.966965   100.47791
 76.100513   100.47791
 76.617365   100.47791
 77.186545   100.47791
 83.032157   100.47791
 87.772441   100.47791
 91.786988   100.47791
 98.161933   100.47791
101.258411   100.47791
105.186097   100.47791
105.928643   100.47791
111.476967   100.47791
119.426046   100.47791
124.406232    92.70218
135.352858    92.70218
136.545958    92.70218

Мне нужно создать фрейм данных «minute_data». Каждая строка соответствует одной минуте наблюдений, содержит количество событий за эту минуту и ​​температуру.

Некоторые минуты могут не содержать событий. Строки, соответствующие таким минутам, должны быть исключены из кадра данных.

Фрейм данных должен выглядеть следующим образом (первые 2 строки):

minute count temperature
  1     7    96.32332
  2    15   100.47791

Ответы [ 2 ]

1 голос
/ 22 марта 2019

И (конечно) data.table также может выполнять эту операцию

пример данных

library( data.table )
DT <- fread("Time Temperature
4.460672    96.32332
15.542545    96.32332
16.750386    96.32332
38.709795    96.32332
39.952442    96.32332
41.320898    96.32332
55.375259    96.32332
61.855321   100.47791
66.464590   100.47791
66.966965   100.47791
76.100513   100.47791
76.617365   100.47791
77.186545   100.47791
83.032157   100.47791
87.772441   100.47791
91.786988   100.47791
98.161933   100.47791
101.258411   100.47791
105.186097   100.47791
105.928643   100.47791
111.476967   100.47791
119.426046   100.47791
124.406232    92.70218
135.352858    92.70218
136.545958    92.70218")

код

Это на самом деле однострочник, но для удобства чтения я добавил несколько разрывов строк.

DT[, list( count = .N, 
           temperature = mean( Temperature ) ), 
   by = .( minute = floor( Time / 60 ) + 1 )]

вывод

#    minute count temperature
# 1:      1     7    96.32332
# 2:      2    15   100.47791
# 3:      3     3    92.70218
1 голос
/ 22 марта 2019

Вы можете использовать dplyr для этого:

library(dplyr)
df %>%
  mutate(minute = Time %/% 60 + 1) %>%
  group_by(minute) %>%
  summarise(count = n(),
            temperature = first(temperature)) %>%
  select(-Time)

Примечание: Измените first на mean, если хотите получить среднее значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...