2015-06-10 2 views
2

У меня есть следующие данные подмножества моих исходных данных.R средний балл по будням и минутам

ID Day 
1  Wednesday 
2  Wednesday 
1  Thursday 
1  Friday 
1  Saturday 
2  Saturday 
2  Sunday 
1  Monday 

Как вы можете видеть, ID 1 имеет одну запись в среду. Мне нужно суммировать дни недели для ID 1 и разделить на 5. Кроме того, мне нужно суммировать выходные дни для ID 1 и разделить на 2.

Выходной сигнал, что мне нужно было бы это

ID Weekdays Weekends 
1  0.8   0.5 
2  0.2   1 

Как вы можете видеть, для ID 1, Weekdays = 0.8 = (4 entries of ID 1 on weekdays)/5 Аналогично Weekends = 0.5 = (1 entry on weekends)/2

Что мне нужно реализовать, чтобы вычислить среднее вхождений каждого идентификатора на выходные и на будний день. Я знаю, что мы можем выполнять все функции с большим количеством шагов. Есть ли способ реализовать то же самое с меньшим количеством LOC?

ответ

5

Вы могли бы потенциально создать некоторую короткую неделю заканчивается вектор, а затем просто сделать простую агрегацию, вот возможным data.table решения

indx <- c("Sunday", "Saturday") 
library(data.table) 
res <- setDT(df)[, as.list(table(Day %in% indx)/c(5, 2)), by = ID] 
setnames(res, c("ID", "Weekdays", "Weekends")) 
# ID Weekdays Weekends 
# 1: 1  0.8  0.5 
# 2: 2  0.2  1.0 
Смежные вопросы