首页 > 解决方案 > 将 R 中矩阵的每一列中的最后 n 个非 NA 值相加

问题描述

我有一个如下所示的矩阵:

x1<-c(1,2,3,4,5,6,NA)
x2<-c(1,2,NA,4,5,NA,NA)
x3<-c(1,2,3,4,NA,NA,NA)
x4<-c(1,2,3,NA,NA,NA,NA)
x5<-c(1,2,NA,NA,NA,NA,NA)
x<-cbind(x1,x2,x3,x4,x5)

如果我想计算每列的最后 3 个非 NA 值,并且如果一列的非 NA 值少于 3 个(如第 5 列),那么我将对该列中的所有非 NA 值求和。我想要一个看起来像的输出

15 11 10 6 3

谢谢!

标签: r

解决方案


您可以使用applywithtail来总结最后一个非NAlike:

apply(x, 2, function(x) sum(tail(x[!is.na(x)], 3)))
#x1 x2 x3 x4 x5 
#15 11  9  6  3 

推荐阅读