我有一个有NA的矩阵,我想找出每行3列的平均值。如何在R中平均每3列有NA
set.seed(100)
a <- matrix(sample(c(NA, 1:4), 90, replace = TRUE), 10)
如果我使用
t(apply(a, 1, tapply, gl(3, 3), mean))
代码找不到平均colums包括NA。我想知道如何修改代码。非常感谢。
我有一个有NA的矩阵,我想找出每行3列的平均值。如何在R中平均每3列有NA
set.seed(100)
a <- matrix(sample(c(NA, 1:4), 90, replace = TRUE), 10)
如果我使用
t(apply(a, 1, tapply, gl(3, 3), mean))
代码找不到平均colums包括NA。我想知道如何修改代码。非常感谢。
我们可以通过转换为3D数组,然后在循环遍历第3个MARGIN后得到rowMeans
。
res <- apply(array(a, c(nrow(a), 3, 3)), 3, rowMeans, na.rm = TRUE)
all.equal(res, t(apply(a, 1, tapply, gl(3, 3),
mean, na.rm = TRUE)), check.attributes = FALSE)
#[1] TRUE
谢谢你的帮助。 'c(nrow(a),3,3)'是什么意思?谢谢。 –
@YangYang 3D数组有三个维度,其中第一个是行,第二个列和第三个维度。在这里,行数与原始矩阵的数量相同。所以我将它指定为'nrow(a)',下一个是3,因为我们只需要每个数组中的3列 – akrun
非常感谢您的帮助! –
'吨(应用(A,1,tapply,GL(3,3),意思是说,na.rm = TRUE))' –
我白痴,哈哈,感谢。 –