R:平均列的语法问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R:平均列的语法问题相关的知识,希望对你有一定的参考价值。
我有一个带有NDVI数据和森林类型的数据集,我的NDVI列充满了NaN。我试图平均2个NDVI列(植被指数从0-1),然后按森林类型计算平均值。我的方法是创建第三列,然后计算平均值。就像这样。
data_full %>%
mutate(sum = sum(meanNDVIyear11,meanNDVIyear12, na.rm=TRUE)) %>%
mutate(sum = sum/2) %>%
group_by(OriginalForest) %>%
summarise(meanNDVI = mean(sum,na.rm=TRUE))
The output is simply wrong:
# A tibble: 4 x 2
OriginalForest meanNDVI
<chr> <dbl>
1 bushland 292.
2 Conifer 292.
3 Decidious 292.
4 Sclerofilous 292.
相反,我可以用一种非常讨厌的方式来做。
data_full %>%
group_by(OriginalForest) %>%
summarise(meanNDVI = mean(((meanNDVIyear12+meanNDVIyear11)/2),na.rm=TRUE))
而且它的工作原理是:
# A tibble: 4 x 2
OriginalForest meanNDVI
<chr> <dbl>
1 bushland 0.462
2 Conifer 0.533
3 Decidious 0.479
4 Sclerofilous 0.557
我很想知道我在第一种方法中做错了什么,这显然是更优雅的!
答案
在第一种方法中,它是以 sum
的整个双列,从而使 mean
同为 sum
取多个参数的总和。
data(mtcars)
library(dplyr)
mtcars %>%
mutate(sum = sum(mpg, cyl))
# mpg cyl disp hp drat wt qsec vs am gear carb sum
#Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 840.9
#Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 840.9
#Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 840.9
#Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 840.9
#...
即
with(mtcars, sum(mpg) + sum(cyl))
#[1] 840.9
以上是关于R:平均列的语法问题的主要内容,如果未能解决你的问题,请参考以下文章