Как извлечь имена столбцов, которые не имеют нулевых значений в наборе данных в r / sparklyr? - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу извлечь только имена столбцов, которые не имеют нулевых значений в большом наборе данных в r.

Если в моей таблице 4 столбца (id, Price, Product, Status) со столбцами Price иСтатус с несколькими нулевыми значениями и столбцами id и Product без нулевых значений.Тогда я бы хотел, чтобы мой вывод был: id, Product

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Если вам нужен точный ответ, вам сначала нужно отсканировать полный набор данных, чтобы подсчитать пропущенные значения:

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    

, но, как вы видите, он будет только пробоватьданные.

0 голосов
/ 06 февраля 2019
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])
...