首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在r/sparklyr中提取数据集中没有任何空值的列名?

如何在r/sparklyr中提取数据集中没有任何空值的列名?
EN

Stack Overflow用户
提问于 2019-02-06 21:45:04
回答 2查看 446关注 0票数 0

我只想提取r中大型数据集中没有空值的列名。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-07 09:28:05

如果你需要一个确切的答案,你必须首先扫描完整的数据集,以计算缺少的值:

代码语言:javascript
复制
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
代码语言:javascript
复制
# A tibble: 1 x 4
     id Price Product Status
  <dbl> <dbl>   <dbl>  <dbl>
1     0     2       0      2

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

代码语言:javascript
复制
cols_without_nulls <- null_counts %>% 
  select_if(funs(. == 0)) %>% 
  colnames()

cols_without_nulls
代码语言:javascript
复制
[1] "id"      "Product"

并使用这些选项来选择

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

存在一个更短的变体:

代码语言:javascript
复制
df %>% select_if(funs(sum(as.numeric(is.na(.)), na.rm=TRUE) == 0))
代码语言:javascript
复制
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    

但正如您所看到的,它只会对数据进行采样。

票数 0
EN

Stack Overflow用户

发布于 2019-02-07 00:41:43

代码语言:javascript
复制
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])
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54555088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档