在返回多个值的应用函数中处理 NA 值
handling NA values in apply functions returning more than one value
我有包含两列 col1
、col2
的数据框 df
,其中包含 NA
值。我必须为他们计算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
值,因此 mean
、sd
的输出都为 NA
。
能否请您提供有关如何删除每个函数 mean
、sd
的 NA
值的想法。另外,请提出任何其他可能的聪明方法。
这里有一个选项:
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)
做同样的事情。
我有包含两列 col1
、col2
的数据框 df
,其中包含 NA
值。我必须为他们计算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
值,因此 mean
、sd
的输出都为 NA
。
能否请您提供有关如何删除每个函数 mean
、sd
的 NA
值的想法。另外,请提出任何其他可能的聪明方法。
这里有一个选项:
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)
做同样的事情。