tidyr完整案例嵌套误解

tidyr完整案例嵌套误解,r,dplyr,tidyr,tidyverse,R,Dplyr,Tidyr,Tidyverse,我不理解使用tidyr的嵌套+complete会导致错误的结果。我已经阅读了帮助手册并尝试了示例,但仍然无法在tidyverse中生成我想要的内容 这是我掌握的数据: ## project_id meta domain1 question_count tag_count ## <int> <chr> <chr> <int> <int> ## 1 1 A d

我不理解使用tidyr
嵌套
+
complete
会导致错误的结果。我已经阅读了帮助手册并尝试了示例,但仍然无法在tidyverse中生成我想要的内容

这是我掌握的数据:

##   project_id meta  domain1 question_count tag_count
##        <int> <chr> <chr>            <int>     <int>
## 1          1 A     d                    3         2
## 2          1 A     e                    3         1
## 3          1 B     h                    3         3
## 4          1 B     i                    3         2
## 5          2 A     d                    2         1
## 6          2 B     i                    2         1
## 7          2 C     k                    2         2
##项目id元域1问题(计数标记)
##                           
##1 A d 3 2
##2 1 A e 3 1
##31BH33
##4 1 B i 3 2
##5 2 A d 2 1
##62BI21
##7 2 C k 2 2
期望输出
##项目id元域1问题(计数标记)
##                            
##1 A d 3 2
##2 1 A e 3 1
##31BH33
##4 1 B i 3 2
##5 1 C k 3 0
##6 2 A d 2 1
##7 2 A e 2 0
##8 2 B h 2 1
##9 2 B i 2 1
##102C22
MWE&我失败的尝试
##MWE
图书馆(dplyr);图书馆(tidyr)
dat%
完整的(
项目编号:,
tidyr::嵌套(问题计数,元,域1),
填充=列表(标记计数=0)
)
###A tibble:14 x 5
##项目\u id问题\u计数元域1标记\u计数
##                            
##1 12 A d 0
##212BI0
##3 1 2 C k 0
##4 1 3 A d 2.00
##5 1 3 A e 1.00
##613BH3.00
##713BI2.00
##8 2 A d 1.00
##92BI1.00
##102C2K2.00
##123AD0
##12 2 3 A e 0
##132B3B0
##143BI0
dat%>%
完整的(
项目编号,问题编号,
tidyr::嵌套(元,域1),
填充=列表(标记计数=0)
)
###A tibble:20 x 5
##项目\u id问题\u计数元域1标记\u计数
##                            
##1 12 A d 0
##2 1 2 A e 0
##312bh0
##412BI0
##512C0
##6 1 3 A d 2.00
##7 1 3 A e 1.00
##813BH3.00
##9 1 3 B i 2.00
##1013CK0
##11 2 A d 1.00
##12 2 A e 0
##132BH0
##14 2 B i 1.00
##15 2 C k 2.00
##162D3AD0
##1723A0
##1823BH0
##1923Bi0
##20 2 3 C k 0
dat%>%
完整的(
meta,域1,
tidyr::嵌套(项目id、问题计数),
填充=列表(标记计数=0)
)
###A tible:30 x 5
##meta domain1项目\u id问题\u计数标记\u计数
##                            
##1 A d 13 2.00
##2 A d 22 1.00
##3 A e 1 3 1.00
##4a20
##5 A h 1 3 0
##6a20
##7 A i 13 0
##8AI20
##9 A k 1 3 0
##10 A k 2 0
## # ... 还有20行

我们可以对两组列使用两个
嵌套

library(dplyr)
library(tidyr)

dat %>%
  complete(
    nesting(meta, domain1),
    nesting(project_id, question_count),
    fill = list(tag_count = 0)
  ) %>%
  arrange(project_id, meta) %>%
  select(names(dat))
# # A tibble: 10 x 5
#    project_id meta  domain1 question_count tag_count
#         <int> <chr> <chr>            <int>     <dbl>
#  1          1 A     d                    3      2.00
#  2          1 A     e                    3      1.00
#  3          1 B     h                    3      3.00
#  4          1 B     i                    3      2.00
#  5          1 C     k                    3      0   
#  6          2 A     d                    2      1.00
#  7          2 A     e                    2      0   
#  8          2 B     h                    2      0   
#  9          2 B     i                    2      1.00
# 10          2 C     k                    2      2.00
库(dplyr)
图书馆(tidyr)
dat%>%
完整的(
嵌套(元,域1),
嵌套(项目id、问题计数),
填充=列表(标记计数=0)
) %>%
安排(项目id,元)%>%
选择(名称(dat))
##A tible:10 x 5
#项目\u id元域1问题\u计数标记\u计数
#                            
#1 A d 3 2.00
#2 1 A e 3 1.00
#31BH33.00
#4 1 B i 3 2.00
#5 1 C k 3 0
#6 2 A d 2 1.00
#7 2 A e 2 0
#82bH20
#9 2 B i 2 1.00
#10 2 C k 2.00

这很难理解。有人能解释刚才发生了什么吗?我不太擅长解释事情,但我认为嵌套将变量作为一个单元绑定在一起。因此,嵌套调用中的变量不会展开,而一个嵌套组
## MWE
library(dplyr); library(tidyr)

dat <- data_frame(
    project_id = as.integer(c(rep(1, 4), rep(2, 3))),
    meta = c('A', 'A', 'B', 'B', 'A', 'B', 'C'),
    domain1 = c('d', 'e', 'h', 'i', 'd', 'i', 'k'),
    question_count =  as.integer(c(rep(3, 4), rep(2, 3))),
    tag_count =  as.integer(c(2, 1, 3, 2, 1, 1, 2))
)


## Failed Attempts
dat %>%
    complete(
        project_id, 
        tidyr::nesting(question_count, meta, domain1), 
        fill = list(tag_count = 0)
    )

## # A tibble: 14 x 5
##    project_id question_count meta  domain1 tag_count
##         <int>          <int> <chr> <chr>       <dbl>
##  1          1              2 A     d            0   
##  2          1              2 B     i            0   
##  3          1              2 C     k            0   
##  4          1              3 A     d            2.00
##  5          1              3 A     e            1.00
##  6          1              3 B     h            3.00
##  7          1              3 B     i            2.00
##  8          2              2 A     d            1.00
##  9          2              2 B     i            1.00
## 10          2              2 C     k            2.00
## 11          2              3 A     d            0   
## 12          2              3 A     e            0   
## 13          2              3 B     h            0   
## 14          2              3 B     i            0   

dat %>%
    complete(
        project_id, question_count,
        tidyr::nesting(meta, domain1), 
        fill = list(tag_count = 0)
    )

## # A tibble: 20 x 5
##    project_id question_count meta  domain1 tag_count
##         <int>          <int> <chr> <chr>       <dbl>
##  1          1              2 A     d            0   
##  2          1              2 A     e            0   
##  3          1              2 B     h            0   
##  4          1              2 B     i            0   
##  5          1              2 C     k            0   
##  6          1              3 A     d            2.00
##  7          1              3 A     e            1.00
##  8          1              3 B     h            3.00
##  9          1              3 B     i            2.00
## 10          1              3 C     k            0   
## 11          2              2 A     d            1.00
## 12          2              2 A     e            0   
## 13          2              2 B     h            0   
## 14          2              2 B     i            1.00
## 15          2              2 C     k            2.00
## 16          2              3 A     d            0   
## 17          2              3 A     e            0   
## 18          2              3 B     h            0   
## 19          2              3 B     i            0   
## 20          2              3 C     k            0   

dat %>%
    complete(
        meta, domain1,
        tidyr::nesting(project_id, question_count), 
        fill = list(tag_count = 0)
    )

## # A tibble: 30 x 5
##    meta  domain1 project_id question_count tag_count
##    <chr> <chr>        <int>          <int>     <dbl>
##  1 A     d                1              3      2.00
##  2 A     d                2              2      1.00
##  3 A     e                1              3      1.00
##  4 A     e                2              2      0   
##  5 A     h                1              3      0   
##  6 A     h                2              2      0   
##  7 A     i                1              3      0   
##  8 A     i                2              2      0   
##  9 A     k                1              3      0   
## 10 A     k                2              2      0   
## # ... with 20 more rows
library(dplyr)
library(tidyr)

dat %>%
  complete(
    nesting(meta, domain1),
    nesting(project_id, question_count),
    fill = list(tag_count = 0)
  ) %>%
  arrange(project_id, meta) %>%
  select(names(dat))
# # A tibble: 10 x 5
#    project_id meta  domain1 question_count tag_count
#         <int> <chr> <chr>            <int>     <dbl>
#  1          1 A     d                    3      2.00
#  2          1 A     e                    3      1.00
#  3          1 B     h                    3      3.00
#  4          1 B     i                    3      2.00
#  5          1 C     k                    3      0   
#  6          2 A     d                    2      1.00
#  7          2 A     e                    2      0   
#  8          2 B     h                    2      0   
#  9          2 B     i                    2      1.00
# 10          2 C     k                    2      2.00