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:平均列的语法问题的主要内容,如果未能解决你的问题,请参考以下文章

计算 R 中矩阵每一列的平均值

R 中各列的平均值,不包括 NA

R - 根据条件组合行以获得平均值/平均值

如何在r中减去两个数据框列的平均值“平均值(df1 $ a-df2 $ b)”

Datagrid:计算页脚中列的平均值或总和

如何根据R中的另一列获取一列的平均值