代码之家  ›  专栏  ›  技术社区  ›  Stefano Potter

使用dplyr用complete填充缺失的值

  •  0
  • Stefano Potter  · 技术社区  · 3 年前

    我有一个这样的数据帧:

    library(tidyverse)
    
    df = tibble(AOI = c('NA', 'NA', 'NA', 'NA', 'NA', 'EA', 'EA'),
                Values = c(-1, -1, 0, 1, 1, -1, 0))
    
    df = df %>% group_by(AOI, Values) %>% tally()
    
    AOI     Values  n
    <chr>   <dbl>   <int>
    EA     -1       1
    EA      0       1
    NA     -1       2
    NA      0       1
    NA      1       2
    

    我想确保每个唯一的AOI都存在所有的值-1、0和1。截至目前,该集团 EA 缺少1。我想用我相信 complete 以确保丢失的三个值中的任何一个都会自动添加,并且 n 用0填充。

    我正在尝试:

    df = df %>% complete(AOI, Values, fill = list(n = 0))
    

    但失败的原因是:

    Error in `dplyr::summarise()`:
    ! Problem while computing `..1 = complete(data = dplyr::cur_data(), ...,
      fill = fill, explicit = explicit)`.
    ℹ The error occurred in group 1: AOI = "EA".
    Caused by error:
    ! object 'AOI' not found
    

    我的预期输出是:

    AOI     Values  n
    <chr>   <dbl>   <int>
    EA     -1       1
    EA      0       1
    EA      1       0
    NA     -1       2
    NA      0       1
    NA      1       2
    

    编辑:

    完成这项任务并不一定要完成,任何获得所需输出的方法对我来说都很好。

    0 回复  |  直到 3 年前
        1
  •  1
  •   Vinícius Félix    3 年前

    我认为,在不断重写数据帧几次之后,它可能产生了一个错误,可能是为了保存一些意外的东西。

    *所以,我稍微更改了一下代码。

    密码

    library(tidyverse)
    
    df <- tibble(AOI = c('NA', 'NA', 'NA', 'NA', 'NA', 'EA', 'EA'),
                Values = c(-1, -1, 0, 1, 1, -1, 0))
    
    df %>%
      arrange(AOI) %>% 
      count(AOI, Values) %>% 
      complete(AOI, Values,fill = list(n = 0))  
    

    输出

    # A tibble: 6 x 3
      AOI   Values     n
      <chr>  <dbl> <dbl>
    1 EA        -1     1
    2 EA         0     1
    3 EA         1     0
    4 NA        -1     2
    5 NA         0     1
    6 NA         1     2
    
    推荐文章