如何使用R获取缺失值之前的列中最后10个值的平均值?

use*_*921 3 r moving-average

我是R的新手,很难搞清楚这一点.我有关于死树的树木生长率的数据,按年组织.所以,我的第一列是年份,右边的列是单个树木的增长率,在每棵树死亡的那一年结束.树死后,数据集中剩余年份的值为"NA".我需要在每棵树死亡之前的10年内采取平均增长,但每棵树在不同的年份死亡.有没有人知道如何做到这一点?以下是数据集的外观示例:

Year    Tree1   Tree2   Tree3
1989    53.00   84.58   102.52
1990    63.68   133.16  146.07
1991    90.37   103.10  233.58
1992    149.24  127.61  245.69
1993    96.20   54.78   417.96
1994    230.64  60.92   125.31
1995    150.81  60.98   100.43
1996    124.25  42.73   75.43
1997    173.42  67.20   50.34
1998    119.60  73.40   32.43
1999    179.97  61.24   NA
2000    114.88  67.43   NA
2001    82.23   55.23   NA
2002    49.40   NA  NA
2003    93.46   NA  NA
2004    104.67  NA  NA
2005    44.14   NA  NA
2006    88.40   NA  NA
Run Code Online (Sandbox Code Playgroud)

所以,我需要计算的平均值是:

Tree1: mean(1997-2006) = 105.01
Tree2: mean(1992-2001) = 67.15
Tree3: mean(1989-1998) = 152.98
Run Code Online (Sandbox Code Playgroud)

由于我需要为大量树执行此操作,因此使用自动计算方法会很有帮助.非常感谢您的帮助!凯蒂

A5C*_*2T1 11

您可以使用sapplytail一起使用na.omit如下:

sapply(mydf[-1], function(x) mean(tail(na.omit(x), 10)))
#   Tree1   Tree2   Tree3 
# 105.017  67.152 152.976 
Run Code Online (Sandbox Code Playgroud)

mydf[-1]说放弃第一列.tail有一个参数,n可以让你从数据的结尾(尾部)指定你想要的值.在这里,我们将其设置为"10",因为您需要最后10个值.然后,假设NA在树生存期间实际数据中没有值,您可以安全地使用na.omit您的数据.