2017-02-03 21 views
0

Мне интересно получить кросс-закладку отсутствующих значений во всех столбцах в фрейме данных SparkR. Данные, которые я пытаюсь использовать может быть сгенерирован с использованием кода ниже:Перекрестное табулирование отсутствующих значений в кадре данных SparkR во всех столбцах

данных
set.seed(2) 

# Create basic matrix 
M <- matrix(
    nrow = 100, 
    ncol = 100, 
    data = base::sample(x = letters, size = 1e4, replace = TRUE) 
) 


## Force missing vales 
M[base::sample(1:nrow(M), 10), 
    base::sample(1:ncol(M), 10)] <- NA 
table(is.na(M)) 

SparkR

После, this answer я хотел бы, чтобы прийти к искомому решению с использованием flatMap. Идея состоит в том, чтобы заменить отсутствующие/отсутствующие значения на T/F и затем подсчитать вхождения для каждой переменной. Сначала это не кажется, что flatMap был не экспортируемые SparkR 2.1, так что я должен был вырыть его с :::

# Import data to SparkR --------------------------------------------------- 

# Feed data into SparkR 
dtaSprkM <- createDataFrame(sqc, as.data.frame(M)) 
## Preview 
describe(dtaSprkM) 
# Missing values count ---------------------------------------------------- 

# Function to convert missing to T/F 
convMiss <- function(x) { 
    ifelse(test = isNull(x), 
      yes = FALSE, 
      no = TRUE) 
} 

# Apply 
dtaSprkMTF <- SparkR:::flatMap(dtaSprkM, isNull) 
## Derive data frame 
dtaSprkMTFres <- createDataFrame(sqc, dtaSprkMTF) 

Во-вторых, после выполнения кода выдает следующее сообщение об ошибке:

Error in (function (classes, fdef, mtable) : 
    unable to find an inherited method for function ‘isNull’ for signature ‘"list"’ 

Желаемая Результаты

На обычной рамке данных в R желаемые результаты могут быть достигнуты следующим образом:

sapply(as.data.frame(M), function(x) { 
    prop.table(table(is.na(x))) 
}) 

Мне нравится гибкость, table и prop.table предложение и в идеале я хотел бы быть в состоянии прийти к подобной гибкости через SparkR.

ответ

1

Вычислительный фракция NULL в колонке:

fractions <- select(dtaSprkM, lapply(columns(dtaSprkM), function(c) 
    alias(avg(cast(isNotNull(dtaSprkM[[c]]), "integer")), c) 
) 

Это создаст одну строку Data.Frame, которые могут быть безопасно и легко собранной видоизмененных локально, например, с tidyr:

library(tidyr) 

fractions %>% as.data.frame %>% gather(variable, fraction_not_null) 

 Смежные вопросы

  • Нет связанных вопросов^_^