【问题标题】:Exclude groups with NAs in tidy dataset在整洁的数据集中排除具有 NA 的组
【发布时间】:2019-02-01 22:05:18
【问题描述】:

我有一个整洁的tibble,其值列由 4 个 ID 列标识。

 > MWA
# A tibble: 16 x 5
# Groups:   Dir [2]
      VP   Con   Dir   Seg time_seg
   <int> <int> <int> <int>    <int>
 1    10     2     1     1     1810
 2    10     2     1     2      260
 3    10     2     1     3      540
 4    10     2     1     4     1470
 5    10     2     1     5      460
 6    10     2     1     6      690
 7    10     2     1     7      760
 8    10     2     1     8       NA
 9    10     2     2     1      320
10    10     2     2     2     1110
11    10     2     2     3      450
12    10     2     2     4      600
13    10     2     2     5     1680
14    10     2     2     6      730
15    10     2     2     7      850
16    10     2     2     8      840

要复制的dput

> dput(MWA)
structure(list(VP = c(10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L), Con = c(2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Dir = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), 
    Seg = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 3L, 4L, 5L, 
    6L, 7L, 8L), time_seg = c(1810L, 260L, 540L, 1470L, 460L, 
    690L, 760L, NA, 320L, 1110L, 450L, 600L, 1680L, 730L, 850L, 
    840L)), row.names = c(NA, -16L), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), vars = "Dir", drop = TRUE, indices = list(
    0:7, 8:15), group_sizes = c(8L, 8L), biggest_group_size = 8L, labels = structure(list(
    Dir = 1:2), row.names = c(NA, -2L), class = "data.frame", vars = "Dir", drop = TRUE))

它们源自一个更大的数据集,其中它们按VPCon 和最后Dir 分组。

如您所见,在第 10 行 tibble 中有一个 NA

我现在想排除整个 Dir 组(所以第 1 行到第 8 行),基于使用 dplyr 缺少这个值的情况。

filteris.nacomplete.cases 一起使用只会删除带有NA 的行,而不是完整的组(这是此数据集中的一个“案例”)。

【问题讨论】:

    标签: r dplyr tibble


    【解决方案1】:

    base R中有anyNA

    library(dplyr)
    MWA %>%
        group_by(Dir) %>%
        filter(!anyNA(time_seg))
    # A tibble: 8 x 5
    # Groups:   Dir [1]
    #     VP   Con   Dir   Seg time_seg
    #  <int> <int> <int> <int>    <int>
    #1    10     2     2     1      320
    #2    10     2     2     2     1110
    #3    10     2     2     3      450
    #4    10     2     2     4      600
    #5    10     2     2     5     1680
    #6    10     2     2     6      730
    #7    10     2     2     7      850
    #8    10     2     2     8      840
    

    【讨论】:

      【解决方案2】:

      使用all() 将评估整个组,因此您可以跳过mutate 步骤。

      MWA %>% 
        group_by(Dir) %>% 
        filter(all(!is.na(time_seg)))
      
      # A tibble: 8 x 5
      # Groups:   Dir [1]
           VP   Con   Dir   Seg time_seg
        <int> <int> <int> <int>    <int>
      1    10     2     2     1      320
      2    10     2     2     2     1110
      3    10     2     2     3      450
      4    10     2     2     4      600
      5    10     2     2     5     1680
      6    10     2     2     6      730
      7    10     2     2     7      850
      8    10     2     2     8      840
      

      【讨论】:

        【解决方案3】:

        您可以先检查特定列是否有缺失值,然后排除整个组。

        library(dplyr)
        
        MWA %>% 
          group_by(VP, Con, Dir) %>% 
          mutate(any_na = any(is.na(time_seg))) %>% 
          filter(!any_na)
        
        # A tibble: 8 x 6
        # Groups:   VP, Con, Dir [1]
        #     VP   Con   Dir   Seg time_seg any_na
        #   <int> <int> <int> <int>    <int> <lgl> 
        # 1    10     2     2     1      320 FALSE 
        # 2    10     2     2     2     1110 FALSE 
        # 3    10     2     2     3      450 FALSE 
        # 4    10     2     2     4      600 FALSE 
        # 5    10     2     2     5     1680 FALSE 
        # 6    10     2     2     6      730 FALSE 
        # 7    10     2     2     7      850 FALSE 
        # 8    10     2     2     8      840 FALSE 
        

        【讨论】:

          猜你喜欢
          • 2021-11-30
          • 1970-01-01
          • 2019-07-17
          • 1970-01-01
          • 1970-01-01
          • 2021-05-28
          • 1970-01-01
          • 2019-09-26
          • 1970-01-01
          相关资源
          最近更新 更多