将 tidyr complete() 与变量中指定的列名一起使用

Chr*_*hee 5 r tidyr

我在使用tidyr::complete()带有列名作为变量的函数时遇到问题。

内置示例按预期工作:

df <- data_frame(
 group = c(1:2, 1),
 item_id = c(1:2, 2),
 item_name = c("a", "b", "b"),
 value1 = 1:3,
 value2 = 4:6
)

df %>% complete(group, nesting(item_id, item_name)) 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将列名作为字符串提供时,它会产生错误。

gr="group"
id="item_id"
name="item_name"
df %>% complete_(gr, nesting_(id, name),fill = list(NA))
Run Code Online (Sandbox Code Playgroud)

小智 6

更简单一点,df %>% complete(!!!syms(gr), nesting(!!!syms(id), !!!syms(name)))现在在 tidyr 1.0.2 中完成


ali*_*ire 2

我认为这是一个complete_不能与 data.frames 或像completecan 这样的列表列一起使用的错误,但这里有一个使用unite_separate来模拟的解决方法nesting

\n\n
df %>% unite_('id_name', c(id, name)) %>% \n    complete_(c(gr, 'id_name')) %>% \n    separate(id_name, c(id, name))\n\n## # A tibble: 4 \xc3\x97 5\n##   group item_id item_name value1 value2\n## * <dbl>   <chr>     <chr>  <int>  <int>\n## 1     1       1         a      1      4\n## 2     1       2         b      3      6\n## 3     2       1         a     NA     NA\n## 4     2       2         b      2      5\n
Run Code Online (Sandbox Code Playgroud)\n