2016-08-22 7 views
1

У меня есть набор данных, который выглядит следующим образом:Создание групп на основе UTC времени

str(m12)'data.frame': 48178 obs. of 10 variables: 
$ created_utc : POSIXct, format: "2016-04-19 02:59:02" "2016-05-01 01:51:58" "2016-04-20 15:11:24" "2016-04-26 23:09:13" ... 
$ WC   : int 122 24 27 34 43 30 18 49 52 16 ... 
$ Analytic  : num 74.05 6.55 1.32 26.21 11.64 ... 
$ Clout  : num 20.6 1 35.5 38.4 40.8 ... 
$ Authentic : num 80.8 91.3 92.5 14.7 87.5 ... 
.... 

Я хочу, чтобы вычислить средний балл для каждой переменной для каждого дня.

Я попытался это:

mean <- aggregate(m12[, 2:10], list(m12$created_utc), mean) 

Он вычисляет среднее значение для каждого второго, но мне это нужно каждый день. Вы знаете, как достичь этого?

Извините, что не предоставил данные для образца. Я просто не знаю, как создать переменную POSIXct.

ответ

1

Мы должны преобразовать 'created_utc' в класс Date, чтобы часть времени была удалена. Затем используйте его как переменную группировки, чтобы получить mean каждого столбца за один день.

aggregate(.~cbind(created_utc= as.Date(created_utc)), m12, FUN = mean, 
      na.rm = TRUE, na.action = NULL) 

Быстрее подходы используют dplyr или data.table

library(dplyr) 
m12 %>% 
    group_by(created_utc = as.Date(created_utc)) %>% 
    summarise_each(funs(mean= mean(., na.rm = TRUE))) 

Или

setDT(m12)[, lapply(.SD, mean, na.rm = TRUE) , .(created_utc = as.Date(created_utc))]  
+1

Он работает плавно. Я использовал версию с dplyr. Спасибо! –