【问题标题】:How to extract the column names which doesn't have any null values in a dataset in r/sparklyr?如何在 r/sparklyr 的数据集中提取没有任何空值的列名?
【发布时间】:2019-06-30 11:49:17
【问题描述】:

我只想提取 r 中大型数据集中不包含空值的列名。

如果我的表有 4 列(id、Price、Product、Status),其中列 Price 和 Status 有几个空值,列 id 和 Product 没有空值。然后我希望我的输出为:id, Product

【问题讨论】:

    标签: r sparklyr


    【解决方案1】:
    data <- data.frame(ID = c(1,2,3,4),
                       Price = c(50, NA, 10, 20),
                       Product = c("A", "B", "C", "D"),
                       Status = c("Complete", NA, "Complete", "Incomplete"))
    
    names(apply(data, 2, anyNA)[apply(data, 2, anyNA) == FALSE])
    

    【讨论】:

      【解决方案2】:

      如果您需要准确的答案,您必须先扫描完整的数据集,以计算缺失值:

      library(dplyr)
      
      df <- copy_to(sc, tibble(
        id = 1:4,  Price = c(NA, 3.20, NA, 42),
        Product = c("p1", "p2", "p3", "p4"),
        Status = c(NA, "foo", "bar", NA)))
      
      null_counts <- df %>% 
          summarise_all(funs(sum(as.numeric(is.na(.)), na.rm=TRUE))) %>% 
          collect() 
      
      null_counts
      
      # A tibble: 1 x 4
           id Price Product Status
        <dbl> <dbl>   <dbl>  <dbl>
      1     0     2       0      2
      

      确定哪些列的缺失计数为零:

      cols_without_nulls <- null_counts %>% 
        select_if(funs(. == 0)) %>% 
        colnames()
      
      cols_without_nulls
      
      [1] "id"      "Product"
      

      并使用这些来选择

      df %>% select(one_of(cols_without_nulls))
      
      # Source: spark<?> [?? x 2]
           id Product
        <int> <chr>  
      1     1 p1     
      2     2 p2     
      3     3 p3     
      4     4 p4 
      

      存在更短的变体:

      df %>% select_if(funs(sum(as.numeric(is.na(.)), na.rm=TRUE) == 0))
      
      Applying predicate on the first 100 rows
      # Source: spark<?> [?? x 2]
           id Product
        <int> <chr>  
      1     1 p1     
      2     2 p2     
      3     3 p3     
      4     4 p4    
      

      但如您所见,它只会对数据进行采样。

      【讨论】:

        猜你喜欢
        • 2018-10-29
        • 2017-02-20
        • 2021-03-10
        • 2014-05-22
        • 1970-01-01
        • 2021-12-04
        • 2018-10-30
        • 2015-08-21
        • 1970-01-01
        相关资源
        最近更新 更多