Избягване на липсващ ред след обобщаване

Използвам RStudio версия 0.98.1028 на Windows. Обобщавайки рамка с данни на много нива, пакет dplyr, използвайки функцията sum(), загубих ред, който имаше sum = 0. С други думи, ако оригиналната ми рамка с данни беше нещо подобно

group <- as.factor(rep(c('X', 'Y'), each = 1, times = 6))
type <- as.factor(rep(c('a', 'b'), each = 2, times = 3))
day <- as.factor(rep(1:3, each = 4))

df = data.frame(type = type, day = day, value = abs(rnorm(12)))
df = df[day != 1 | type != 'a',]

и го обобщавам

df1 = df %>%
    group_by(day, type) %>%
    summarise(sum = sum(value))

след това получавам един липсващ ред, който е взаимодействието между day = 1 и type = a, което бих искал да имам (дори и да е 0...)

Благодаря предварително!

EB


person Emiliano    schedule 03.01.2015    source източник
comment
Можете ли да дадете малък възпроизводим пример, който представлява проблема?   -  person Marat Talipov    schedule 03.01.2015
comment
Извинявай моя грешка. Ще редактирам въпроса   -  person Emiliano    schedule 03.01.2015
comment
Точно това е целта наистина! Примерът, който предоставих тук, е много опростен по отношение на това, което всъщност боравя, но е доста представителен за проблема ми...   -  person Emiliano    schedule 03.01.2015
comment
@Emiliano В набора от данни за поднабора нямате този комбиниран ред от day=1 и type=a   -  person akrun    schedule 03.01.2015
comment
@Emiliano Струва ми се, че искахте всички комбинации дори след поднабор. т.е. комбинациите, които не са били в набора от данни на поднабора, трябва да имат сумата на 0. Ако случаят е такъв, публикувах решение по-долу.   -  person akrun    schedule 03.01.2015


Отговори (1)


Можеш да опиташ left_join

library(dplyr)
left_join(expand.grid(type=unique(df$type), day=unique(df$day)), df1) %>%
                            group_by(day, type) %>%
                            summarise(sum=sum(value, na.rm=TRUE))
#  day type       sum
#1   1    a 0.0000000
#2   1    b 0.5132914
#3   2    a 1.2482210
#4   2    b 0.9232343
#5   3    a 2.0381779
#6   3    b 0.7558351

където df1 е

 df1 <- df[day != 1 | type != 'a',]
person akrun    schedule 03.01.2015
comment
Мисля, че df[day != 1 | type != 'a',] не е това, което OP смяташе, че е, така че може би е по-добре да го замените с код, който прави подмножеството въз основа на променливите на df. - person talat; 03.01.2015
comment
@docendodiscimus Ще изчакам отговора на ОП, както коментирах публикацията. - person akrun; 03.01.2015
comment
За съжаление кодът, който предлагате, не работи правилно и причината за това е, че всъщност имам странна база данни, с много липсващо взаимодействие между променливата ден и друга променлива. С df[day != 1 | type != 'a',] само се опитвах да възпроизведа моя случай. Пренаписах сценария си. Много благодаря за помощта! - person Emiliano; 07.01.2015