R 如何在计算平均值时去除NA?

R 如何在计算平均值时去除NA?,r,R,您可以看到,每当我们有NA时,返回的结果就是NA。我想计算b和c之间的平均值,如果两者都有值,但如果b或c中的任何一个有NA,那么只需返回b或c的值。预期的结果将是: b=c(1,4,3,NA) c=c(NA,4,3,8) res=(b+c)/2 NA 4 3 NA 我们可以在cbind之后使用rowMeans对向量“b”、“c”进行排序,以创建矩阵行表示有选项(na.rm=TRUE)来处理na值 res 1 4 3 8 或col表示rbinding向量后的 rowMeans(cbind(b

您可以看到,每当我们有
NA
时,返回的结果就是
NA
。我想计算
b和c
之间的平均值,如果两者都有值,但如果
b或c
中的任何一个有NA,那么只需返回
b或c
的值。预期的结果将是:

b=c(1,4,3,NA)
c=c(NA,4,3,8)
res=(b+c)/2
NA 4 3 NA

我们可以在
cbind
之后使用
rowMeans
对向量“b”、“c”进行排序,以创建
矩阵
<代码>行表示有选项(
na.rm=TRUE
)来处理
na

res
1 4 3 8
col表示
rbind
ing向量后的

rowMeans(cbind(b,c), na.rm=TRUE)

假设我们有矩阵而不是向量,我们仍然可以在遍历其中一个数据集的列/行(假设它们具有相同的维度)后执行
rowMeans/colMeans
。比如说,

colMeans(rbind(b,c), na.rm=TRUE)
另一种替代循环的方法是用
0
替换两个数据集中的
NA
元素。为此,我们可以使用
replace
,进行
+
运算,并根据每个位置的
NA
元素计数进行除法

m1 <- sapply(seq_len(ncol(b)), function(i)
             rowMeans(cbind(b[,i], c[,i]), na.rm=TRUE))
m1
#   [,1] [,2]
#[1,]    1  1.5
#[2,]    4  3.0
#[3,]    3  3.0
#[4,]    8  3.0

我们可以在
cbind
之后使用
rowMeans
对向量“b”、“c”进行排序,以创建
矩阵
<代码>行表示有选项(
na.rm=TRUE
)来处理
na

res
1 4 3 8
col表示
rbind
ing向量后的

rowMeans(cbind(b,c), na.rm=TRUE)

假设我们有矩阵而不是向量,我们仍然可以在遍历其中一个数据集的列/行(假设它们具有相同的维度)后执行
rowMeans/colMeans
。比如说,

colMeans(rbind(b,c), na.rm=TRUE)
另一种替代循环的方法是用
0
替换两个数据集中的
NA
元素。为此,我们可以使用
replace
,进行
+
运算,并根据每个位置的
NA
元素计数进行除法

m1 <- sapply(seq_len(ncol(b)), function(i)
             rowMeans(cbind(b[,i], c[,i]), na.rm=TRUE))
m1
#   [,1] [,2]
#[1,]    1  1.5
#[2,]    4  3.0
#[3,]    3  3.0
#[4,]    8  3.0

首先,使用函数
rowMeans
,第二次使用
na.rm=T
。首先,使用函数
rowMeans
,第二次使用
na.rm=T
。谢谢@akrun假设
b
是一个矩阵,而
c
是一个矩阵。我们如何应用您的解决方案?。事实上,我的真实数据是矩阵,但我给出了一个简单的例子。@temor它取决于
b
的维度。你能再具体一点吗?假设
nrow(b)
c
长度相同。然后我们可以
cbind
两者并获得
行的意思。如果
ncol(b)
c
length
相同,我们将
rbind
它。b的尺寸与c的尺寸相似。b的dim是1000列*500行,c的dim是1000列*500行。@temor Try
sapply(seq_len(ncol(b)),function(i)rowMeans(cbind(b[,i],c[,i]),na.rm=TRUE))
谢谢@akrun如果
b
是矩阵而
c
是矩阵该怎么办。我们如何应用您的解决方案?。事实上,我的真实数据是矩阵,但我给出了一个简单的例子。@temor它取决于
b
的维度。你能再具体一点吗?假设
nrow(b)
c
长度相同。然后我们可以
cbind
两者并获得
行的意思。如果
ncol(b)
c
length
相同,我们将
rbind
它。b的尺寸与c的尺寸相似。b的尺寸为1000列*500行,c的尺寸为1000列*500行。@temor Try
sapply(序号(ncol(b)),函数(i)行表示(cbind(b[,i],c[,i]),na.rm=TRUE))