3

我是 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

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

Tree1: mean(1997-2006) = 105.01
Tree2: mean(1992-2001) = 67.15
Tree3: mean(1989-1998) = 152.98

由于我需要对大量树执行此操作,因此拥有一种自动计算的方法会很有帮助。非常感谢您的帮助!凯蒂

4

1 回答 1

11

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

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

mydf[-1]说要删除第一列。tail有一个参数 ,可让您从数据的末尾(尾部)n指定要多少个值。在这里,我们将其设置为“10”,因为您需要最后 10 个值。然后,假设在树还活着的时候你的实际数据中没有值,你可以安全地使用你的数据。NAna.omit

于 2012-12-19T16:41:18.663 回答