R: Синтаксические проблемы в столбцах усреднения - PullRequest
1 голос
/ 19 апреля 2020

У меня есть набор данных с данными 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

Я так хрен ios знать, что я делаю неправильно при первом подходе, который явно более элегантен!

1 Ответ

2 голосов
/ 19 апреля 2020

В первом подходе он принимает 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...