2016-07-06 2 views
0
>head(df) 
     person week target actual drop_out organization agency 
1:  QJ1 1  30  19 TRUE  BB   LLC 
2:  GJ2 1  30  18 FALSE  BB   LLC 
3:  LJ3 1  30  22 TRUE  CC   BBR 
4:  MJ4 1  30  24 FALSE  CC   BBR 
5:  PJ5 1  35  55 FALSE  AA   FUN 
6:  EJ6 1  35  50 FALSE  AA   FUN 

В наборе данных имеется приблизительно 30 недель с повторяющимся идентификатором личности каждую неделю.R: Создайте столбец средних значений по группам из четырех рядов.

Я хочу посмотреть значения каждого человека за четыре недели за раз (так что 1-4, 5-9, 10-13 и так далее). Для каждого из этих фрагментов я хочу добавить все «фактические» столбцы и разделить его на сумму «целевых» столбцов. Затем мы могли бы поместить это значение в столбец, называемый «ежемесячный процент».

В соответствии с рекомендацией формы, я создал месяц колонку, как так

fullReshapedDT$month <- with(fullReshapedDT, ceiling(week/4)) 

Пытаясь выяснить, как перебрать столбец месяца и вычислить средние значения в настоящее время. Попытка что-то вроде этого, но она явно не работает:

fullReshapedDT[,.(monthly_attendance = actual/target,by=.(person_id, month)] 
+0

Где именно вы застреваете? Это поможет, если вы предоставили [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) (возможно, с поддельными данными), чтобы лучше проиллюстрировать проблема. Дайте желаемый результат для ввода образца, поэтому возможные решения могут быть протестированы. Если вы попытаетесь сделать это самостоятельно, включите свой код и укажите, где именно вы застреваете. – MrFlick

+2

Создайте новый столбец, используя что-то вдоль линии «потолок (неделя/4) * 4', а затем группируйте его по – Shape

+0

Спасибо за идею, Shape. Попробуй это сейчас – Parseltongue

ответ

1

Вы пытались создать групповую переменную? Это позволит вам группировать операции на четырехнедельный период:

setDT(df1)[,grps:=ceiling(week/4)  #Create 4-week groups 
      ][,sum(actual)/sum(target), .(person, grps) #grouped operations 
      ][,grps:=NULL][]  #Remove unnecessary columns 
#  person  V1 
# 1:  QJ1 1.1076923 
# 2:  GJ2 1.1128205 
# 3:  LJ3 0.9948718 
# 4:  MJ4 0.6333333 
# 5:  PJ5 1.2410256 
# 6:  EJ6 1.0263158 
# 7:  QJ1 1.2108108 
# 8:  GJ2 0.6378378 
# 9:  LJ3 0.9891892 
# 10: MJ4 0.8564103 
# 11: PJ5 1.1729730 
# 12: EJ6 0.8666667 
+0

Ничего себе. Это невероятно. Я не был знаком с этим синтаксисом или сгруппированными операциями. Знаете ли вы о каких-либо хороших ресурсах, чтобы узнать об этом? – Parseltongue

+1

Вот некоторые виньетки https://github.com/Rdatatable/data.table/wiki/Getting-started –

+0

Спасибо, Пьер. Похоже, вы связываете операции с data.table с помощью последовательных [] ... как это работает? – Parseltongue

Смежные вопросы