2015-06-10 4 views
4

У меня есть dataframe df с двумя столбцами col1, col2, включает в себя NA значения в них. Я должен рассчитать mean, sd для них. Я вычислил их отдельно с кодом ниже.Обработка значений NA в приложениях, возвращающих более одного значения

# Random generation 
set.seed(12) 
df <- data.frame(col1 = sample(1:100, 10, replace=FALSE), 
       col2 = sample(1:100, 10, replace=FALSE)) 

# Introducing null values 
df$col1[c(3,5,9)] <- NA 
df$col2[c(3,6)] <- NA 

# sapply with return a value for a function 
stat <- data.frame(Mean=numeric(length = length(df)), row.names = colnames(df)) 
stat[,'Mean'] <- as.data.frame(sapply(df, mean, na.rm=TRUE)) 
stat[,'Sd'] <- as.data.frame(sapply(df, sd, na.rm=TRUE)) 

Я попытался выполнить обе операции за один раз, используя приведенный ниже код.

#sapply with return more than one value 
stat[,c('Mean','Sd')] <- as.data.frame(t(sapply(c(1:length(df)),function(x) 
    return(c(mean(df[,x]), sd(df[,x])))))) 

Как мне не удалось удалить NA значения в последней функции, я получаю выход как NA для обоих mean, sd.

Не могли бы вы дать представление о том, как удалить NA значений для каждой функции mean, sd. Также, пожалуйста, предложите любые другие возможные умные способы.

+4

Попытка: 'vapply (df, function (x) c (среднее (x, na.rm = TRUE), sd (x, na.rm = TRUE)), числовое (2))' – nicola

+0

@nicola Спасибо, он работал по мере необходимости. – Prradep

ответ

3

Вот вариант:

funs <- list(sd=sd, mean=mean) 
sapply(funs, function(x) sapply(df, x, na.rm=T)) 

Производит:

  sd  mean  
col1.value 39.34826 39.42857 
col2.value 28.33946 51.625 

Если вы хотите получить мило с functional библиотеки:

sapply(funs, Curry(sapply, X=df), na.rm=T) 

ли то же самое.

+0

'funs <- data.frame (sd, mean)' дает мне ошибку 'не может принуждать класс" "function" "к data.frame'. Нужно ли загружать какой-либо пакет для преодоления этой ошибки? – Prradep

+0

@Prradep Просто используйте 'list (sd = sd, mean = mean)'. Не уверен, почему вы получаете эту ошибку, а не я, возможно, и разницу в версии R. – BrodieG

+0

Да, ошибка с функцией списка. Я использую R 3.1.2. Устранена ли эта проблема в новой версии? – Prradep

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

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