使用tidyr :: complete with group_by

Man*_*l R 4 r dplyr tidyr

有谁知道是否tidyr::complete()支持分组通过group_by()

确切地说:我有一些看起来像这样的数据框

df <- data.frame(
  "ID"   = rep(1:2, each = 2),
  "Col1" = c("A", NA, "AA", NA),
  "Col2" = c("B", "C", "BB", "CC"))
Run Code Online (Sandbox Code Playgroud)

现在我想使用complete()group_by()计算每组的所有可能组合!

df %>% 
 group_by(ID) %>% 
 complete(Col1, Col2)

  Error in .Call("dplyr_left_join_impl", PACKAGE = "dplyr", x, y, by_x,  : 
  negative length vectors are not allowed
Run Code Online (Sandbox Code Playgroud)

这会导致错误.但是,使用complete()没有分组工作,但这不是我想要的.

df %>% 
 complete(Col1, Col2)
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我做错了什么,或者根本complete()不合作group_by
  2. 如果是这样,我怎么能这样做(最好不使用循环)?

sha*_*dow 5

你可以使用completegroup_by,但你必须使用一个do声明:

df %>% 
 group_by(ID) %>% 
 do(complete(., Col1, Col2, fill = list(ID = .$ID)))
Run Code Online (Sandbox Code Playgroud)