使用na.omit或NA.RM和mapply跨Datafrme的多个列忽略R中的NA

用户名

我有一个看起来像这样的数据框:

 SampleNo Lab1  Lab2  Lab3 lab4    lab5    lab6    lab7   lab8    lab9   lab10 
1  59.84    60.59   60.39   60.29   60.19   60.32   60.24   60.3    60.43   NA
2  59.78    60.19   60.16   60.23   60.32   60.46   60.53   60.2    60.40   59.6
3  59.86    60.17   60.22   60.28   60.18   60.42   60.21   60.0    60.44   NA 
4  59.85    60.42   60.28   60.31   60.19   60.41   60.54   60.2    60.48  59.7 
5  59.97    60.79   60.30   60.26   60.40   60.47   60.52   60.0    60.46   59.7
6  60.03    60.26   60.36   60.21   60.32   60.46   60.50   60.1    60.29   60.0

我想对数据帧中每一列的平方求和,而忽略NA值并分配给新向量。我可以使代码适用于1列,但是我想使用该mapply函数或类似方法来同时获取所有列中的值并将其分配给新向量。

我在单列中有以下代码

myvector <- sum(na.omit(df[,2] - mean(df[,2))^2)) 这适用于1列

我已经为整个数据框尝试了以下内容

myvector <- (mapply(na.omit(sum(df[,2:11] - mean(df[,2:11]))^2)))

我收到错误消息,说“ match.fun(FUN)中存在错误:c(“” na.omit(sum(df [,2:11]-Mean(df [,不是函数,字符或符号“,”,2:11 ]))^ 2不是函数字符或符号

myvector <- (mapply(sum(na.omit(df[,2:11] - mean(df[,2:11]))^2)))

但是得到这个错误:

sum(na.omit,df [,2:11]中的错误-mean(df [,:参数的'type'(closure)无效)另外:警告消息:mean.default(df [,2:11]) :参数不是数字或逻辑:返回NA

我的想法是na.omit放在错误的位置,但是我对应该走的地方迷失了。

蔡卓妍

您可以转置数据,减去列均值,然后计算平方和。

rowSums((t(df[-1]) - colMeans(df[-1], na.rm = TRUE))^2, na.rm = TRUE)

另外,您可以将每列样本方差与相应的非缺失值的长度减去1以获得平方差之和。

sapply(df[-1], var, na.rm = TRUE) * (colSums(!is.na(df[-1])) - 1)

# Lab1  Lab2  Lab3  lab4  lab5  lab6  lab7  lab8  lab9 lab10 
# 0.04  0.31  0.04  0.01  0.04  0.02  0.12  0.07  0.02  0.09

式:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章