2015-02-06 2 views
-1

У меня есть большой кадр данных, содержащий данные, выглядит следующим образом:Манипулирование данными в R - Манипулирование Поднаборы внутри подмножеств

customer usage hour day temp 
5   0.13 07  14 59 
5   0.12 07  14 51 
5   0.11 08  14 53 
5   0.19 09  15 56 
12   0.19 07  15 60 
12   0.13 07  14 50 
12   0.13 07  14 40 
9   0.16 08  03 47 
9   0.16 08  15 59 
9   0.17 08  15 53 

То, что я хочу сделать, это, для каждого клиента, сложите их использование в течение каждого часа и средний их темп за каждый час, разделенный днями. Другими словами, в каждом подмножестве клиентов я хочу использовать сумму «использования» и «темп» для каждого часа и каждого дня. Таким образом, для этого образца кода идеальным выходом будет

customer SumUsage hour day Averagetemp 
5   0.25  07  14 55 
5   0.11  08  14 51 
5   0.11  09  15 56 
12   0.19  07  15 60 
12   0.26  07  14 45 
9   0.16  08  03 47 
9   0.33  08  15 56 

Надеюсь, это имеет смысл. Я новичок в R, и я не могу заставить его работать правильно. Просто повторить то, что я хотел получить от выхода еще раз: каждый клиент имеет несколько «использования» выходов несколько раз в час, в течение нескольких дней из месяца. Существует также «временное» чтение для каждого вывода «использования». Я хочу объединить все показания часов на одного клиента. Поэтому для каждого клиента за каждый день каждый час дня должен иметь сумму «использования» выходов за каждый час, а также средний «темп» для всех этих выходов.

ответ

1

Вы можете использовать summarise из dplyr:

require(dplyr) 
df %>% 
    group_by(customer, day, hour) %>% 
    summarise(SumUsage = sum(usage), Averagetemp = mean(temp)) 

Или с помощью data.table

require(data.table) 
setDT(df)[, list(SumUsage = sum(usage), 
       Averagetemp = mean(temp)), by = list(customer, day, hour)]