有没有办法使用 dplyr 用 0 填充缺失的日期?

Jac*_*tis 5 r dplyr apache-spark sparklyr

我有一个这样的数据集:

id  date     value      
1   8/06/12    1         
1   8/08/12    1         
2   8/07/12    2         
2   8/08/12    1         
Run Code Online (Sandbox Code Playgroud)

每个 id 都应该有每个日期的值。当 id 缺少特定日期时,需要为该行添加值 0。例如,

id  date     value      
1   8/06/12    1   
1   8/07/12    0      
1   8/08/12    1  
2   8/06/12    0         
2   8/07/12    2         
2   8/08/12    1     
Run Code Online (Sandbox Code Playgroud)

我正在尝试找出如何添加带有 0 的行。这里有一个很好的解决方案:R - 按组填充缺失的日期。但是,我无法使用该函数,因为据我所知,我tidyr::complete正在使用该函数,并且需要保留在函数内。sparklyrdplyr

ste*_*ica 3

在 中sparklyr,您必须使用 Spark 函数。这是一份工作coalesce。首先,您必须填写您希望看到的所有 id 和日期对,所以可能类似于:(编辑

all_id <- old_data %>% distinct(id) %>% mutate(common=0)
all_date <- old_data %>% distinct(date) %>% mutate(common=0)
all_both <- all_id %>% full_join(all_date,by='common')
data <- old_data %>%
  right_join(all_both %>% select(-common),by=c('id','date')) %>%
  mutate(value=`coalesce(value,0)`)
Run Code Online (Sandbox Code Playgroud)

我假设您在旧数据中拥有您关心的所有日期和 ID,但情况可能并非如此。