Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算R中一系列行之间的值的平均值?_R - Fatal编程技术网

如何计算R中一系列行之间的值的平均值?

如何计算R中一系列行之间的值的平均值?,r,R,这是去年在这个网站上为我成功回答的一个问题的后续问题 之前,我曾问过如何在缺少值之前获取列中最后10行的平均值。我的数据是树木的生长率-我的第一列是年份,右边的列是单株树木的生长率,以每棵树死亡的年份结束。在每棵树“出生”之前和死后,生长率值为NA。当我需要计算每棵树死亡前10年的平均值时,有效的代码是: sapply(dataframe, function(dataframe) mean(tail(na.omit(dataframe), 10))) 后来,我需要计算每棵树生命前50年的平均生

这是去年在这个网站上为我成功回答的一个问题的后续问题

之前,我曾问过如何在缺少值之前获取列中最后10行的平均值。我的数据是树木的生长率-我的第一列是年份,右边的列是单株树木的生长率,以每棵树死亡的年份结束。在每棵树“出生”之前和死后,生长率值为
NA
。当我需要计算每棵树死亡前10年的平均值时,有效的代码是:

sapply(dataframe, function(dataframe) mean(tail(na.omit(dataframe), 10)))
后来,我需要计算每棵树生命前50年的平均生长率,所以我用“头”代替“尾”,使用以下代码:

sapply(dataframe, function(dataframe) mean(head(na.omit(dataframe), 50)))
现在,我的问题是:我如何计算每棵树在生长的前50年和100年之间的平均生长量?那么,我想知道每棵树在50-100年树龄之间的平均生长量?是否有一个我不知道的函数(类似于“head”或“tail”)允许我计算特定行之间的平均值?困难在于每棵树都是在不同的年份出生(或死亡),所以我不能简单地为某些年份编制索引

谢谢你能提供的帮助


凯蒂

头部
尾部
结合起来,可以满足你的需求。例如:

> x<-1:10
> tail(head(x,4),2)
[1] 3 4
如果需要,也可以使用显式索引,因为
na.ommit
将删除所有na值,因此
na.ommit(x)[51:100]
将是树诞生后的51-100年。所以你也可以一起去

sapply(dataframe, function(x) mean(na.omit(x)[51:100]))

两者之间的唯一区别是,如果一列的有效项少于100个,则会发生什么情况。在这种情况下,head/tail方法将给出最后50个有效条目的平均值(如果总数少于50个,则小于50个),而51:100方法将返回NA

谢谢大家!!这两种解决方案都按预期工作,我使用了您的索引修复(na.omit(x)[51:100],因为我确实有一些树的生长时间不到100年。
sapply(dataframe, function(x) mean(na.omit(x)[51:100]))