r - 在返回多个值的 apply 函数中处理 NA 值

标签 r dataframe sapply

我有数据框df有两列col1 , col2 ,包括NA他们身上的值(value)观。我必须计算mean , sd对于他们来说。我用下面的代码分别计算了它们。

# 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 。另外,请建议任何其他可能的明智方法。

最佳答案

这里有一个选项:

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  

如果您想使用功能性库:

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

做同样的事情。

关于r - 在返回多个值的 apply 函数中处理 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30758043/

相关文章:

r - 在R中应用,如何使用?

performance - 如何重写 "sapply"命令以提高性能?

r - 当数字列上的键和从文件中读取的数据时,键控 data.table 的 X[Y] 连接失败

r - 在 sqldf 中将整数值转换为日期时间

python - 防止随机森林回归器中数据泄漏的建议

python - 如何从 Pig 加载/导出 CSV/TSV 文件到 Pandas?

python - 如何在 df.apply() 之后返回数据框

R:在保留数据帧其余部分的特定列上应用函数

r - 如何使用 R 按模式识别列并将其转换为日期时间?

r - < 在 data.table 中代表什么与 on= 连接