2017-02-03 9 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

, 내가 flatMap를 사용하여 원하는 해결에 도달하고자하는 this answer을. 아이디어는 누락되거나 누락되지 않은 값을 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))) 
}) 

나는 tableprop.table 제공 이상적으로 내가 SparkR를 통해 유사한 유연성에 도달 할 수 있도록하고 싶습니다하는 유연한 방법이 좋다. 열당 NULL

답변

1

계산 분율

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

이것은 tidyr 예는 안전하게 로컬 고쳐 쉽게 수집 할 수있는 단일 행 Data.Frame를 만들 것이다

library(tidyr) 

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