2015-06-03 3 views
0

У меня есть необходимость подмножества данных по строкам на основе переменной «Флаг». То есть, в примере ниже, если флаг == 1 сопровождается тремя или любыми 0, то суммируйте M1 и M2 для трех строк, где флаг == 0. Я ожидаю, что в G1 + G2 количество таких событий будет изменяться , Для каждого требуется сводка.R: Условно подмножество строк

Может ли такое подмножество и подведение итогов выполняться такими функциями, как агрегат или его варианты, или это должно быть закодировано с помощью циклов, явно индексируя каждый элемент? Любые намеки были бы наиболее ценными.

G1 G2 G3 Flag M1 M2 
10 1 0 0 0 5336.682 
10 1 0 1 1 1871.782 
10 1 0 0 0 3330.898 
10 1 0 0 0 763.134 
10 1 0 0 1 1183.485 
10 1 0 0 1 385.664 
10 1 0 0 1 372.036 
10 1 0 1 1 329.601 
10 1 1 1 0 281.965 
10 1 1 0 0 377.866 
10 1 1 0 0 328.342 
10 1 1 0 0 512.528 
10 1 1 1 0 777.216 
10 1 1 0 0 409.559 
10 1 1 1 0 417.606 
10 1 1 1 0 673.728 
10 1 1 0 0 1090.082 
10 1 1 0 0 345.481 
10 1 1 0 0 329.294 
10 2 ... ... ... ... 
11 1 ... ... ... ... 
... ... ... ... ... ... 
11 2 ... ... ... ... 
+0

Итак, группа остается прежней, пока вы не нажмете новый флаг == 1, а затем это следующая группа? – C8H10N4O2

+0

G2 вложен в G1. G2 состоит из двух уровней: 1 и 2. Я надеюсь найти все экземпляры ограничений (Flag == 1, за которым следуют три или что-то еще Флаг == 0), а затем сгенерировать итоговую статистику (например, среднее значение) для двух переменных проценты, M1 & M2. Таким образом, в этом примере сводная статистика будет выполняться на трех строках после флага. Первый выход будет генерироваться из M1 [0, 0, 1] и M2 [3330.898, 763.134, 1183.484]. Затем для M1 [0,0,0] и M2 [377,866, 328,342, 512,528]. Следующий флаг == 1 не удовлетворяет ограничениям. Все они будут сгруппированы с G1 [10], G2 [1]. – ksing

ответ

2

Вы можете использовать data.table. Во-первых, поместите ваши данные в dataframe под названием «df». Затем запустите

dt <- data.table(df) 
dt[, group := cumsum(Flag)] 
dt[, list(M1 = sum(M1[-1]), M2 = sum(M2[-1])), by = "group"] 

Вы не указали, какое резюме вам нужно для солнца, поэтому мы просто суммируем M1 и M2.

+0

Спасибо. Я буду исследовать, но я не уверен, как сдерживать выполнение. Я уточнил выше. – ksing

+0

Поскольку «флаги» назначены случайным образом, некоторые «группы» могут быть очень короткими = 1. Как следствие, кажется, что невозможно вычислить M2 = M2 [2] + M2 [3] + M2 [4 ] для получения суммы трех измерений, независимо от группы, сразу после флага == 1. – ksing

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