gpt4 book ai didi

r - 使用 na.omit r NA.RM 和 lapply 在 Dataframe 的多列中忽略 R 中的 NA

转载 作者:行者123 更新时间:2023-12-04 15:18:34 27 4
gpt4 key购买 nike

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

 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[, is not a function, character or symbol”, 2:11]))^2 不是函数字符或符号

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

但是得到这个错误:

Error in sum(na.omit, df[, 2:11] - mean(df[, :invalid 'type' (closure) of argumentIn addition: Warning message:In mean.default(df[, 2:11]) :argument is not numeric or logical: returning 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

公式:

关于r - 使用 na.omit r NA.RM 和 lapply 在 Dataframe 的多列中忽略 R 中的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63841414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com