Различные способы вычисления среднего значения в R - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь вычислить среднее значение столбца информационного кадра, используя некоторые ограничения, поэтому сначала я сделал:

mean(Ykkonen$deltaA[Ykkonen$PH<=2.5], na.rm = TRUE)

но я когда пытаюсь вместо

Ykkonen %>% filter(PH<=2.5) %>% mean(deltaA, na.rm = TRUE)

Я получаю ошибку

[1] NA
Warning message:
In mean.default(., deltaA) :
argument is not numeric or logical: returning NA

Все же deltaA является числовым. Поэтому я пытаюсь понять, почему использование трубок %>% отличается?

Я имею в виду, если я правильно понимаю, набрав dataframe %>% filter(a=='s'), он должен возвращать только те записи, которые имеют s для переменной a, я прав?

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Если вы хотите вернуть одно значение в виде числового вектора (длиной 1), вы можете использовать pull:

Ykkonen %>% filter(PH<=2.5) %>% pull(deltaA) %>% mean(na.rm = TRUE)

Вот воспроизводимый пример:

library(dplyr)

mtcars %>% filter(qsec >= 17) %>% pull(drat) %>% mean(na.rm = TRUE)
# [1] 3.561304

Чтобы убедиться, что цель числовая, вы также можете использовать summarize_if вот так:

mtcars %>% filter(qsec >= 17) %>% summarize_if(is.numeric, mean) %>% pull(drat)
0 голосов
/ 25 августа 2018

Вам нужно использовать функцию суммирования, чтобы получить желаемый результат.

Ykkonen %>% filter(PH<=2.5) %>% summarise(mean = mean(deltaA, na.rm = TRUE)

Вы должны проверить, что вы получите, когда используете Ykkonen %>% filter(PH<=2.5). Это будет data.frame (tibble), а не вектор. Поэтому, когда вы используете среднее значение после фильтра, вы присваиваете значение data.frame, что приведет к этой ошибке. Одна из проверок, которую выполняет среднее значение:

if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) {
warning("argument is not numeric or logical: returning NA") 

И data.frame не пройдет этот тест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...