对于去年在本网站上成功回答的问题,这是一个后续问题,请参阅How to take the mean of last 10 values in a column before a missing values using R。
之前,我曾询问如何在缺失值之前获取列中最后10行的平均值。我的数据是树木的增长率 - 我的第一列是年份,右边的列是单个树木的增长率,在每棵树死亡的那一年结束。在每棵树“出生”之前和树木死亡之后,增长率值为NA
。当我需要在每棵树死亡之前采用过去10年的平均值时,有效的代码是:
sapply(dataframe, function(dataframe) mean(tail(na.omit(dataframe), 10)))
后来,我需要考虑每棵树生命的前50年的平均增长率,所以我用“head”代替“tail”,使用以下代码:
sapply(dataframe, function(dataframe) mean(head(na.omit(dataframe), 50)))
现在,我的问题是:如何在增长的前50年和100年之间采取每棵树的增长平均值?那么,我希望每棵树在50-100岁之间的平均增长?是否有一个我不知道的功能(类似于“头部”或“尾部”)可以让我获取特定行之间的平均值?困难在于每棵树在不同的年份出生(或死亡),所以我不能简单地指出某些年份。
感谢您提供的任何帮助。
凯蒂
答案 0 :(得分:0)
结合head
和tail
可以满足您的需求。例如:
> x<-1:10
> tail(head(x,4),2)
[1] 3 4
所以在你的情况下它看起来像你想要的是:
sapply(dataframe, function(x) mean(tail(head(na.omit(x), 100),50)))
如果需要,您还可以使用显式索引,因为na.omit
将删除所有NA值,因此na.omit(x)[51:100]
将是自树生成以来的51-100年。所以你也可以选择
sapply(dataframe, function(x) mean(na.omit(x)[51:100]))
两者之间的唯一区别是,如果列的有效条目少于100个,会发生什么。在这种情况下,head / tail方法将为您提供最近50个有效条目的平均值(如果总数少于50个,则为更少),而51:100方法将返回NA。