rowMeans () и mean () возвращают разные значения? - PullRequest
1 голос
/ 19 апреля 2019

Я не уверен, почему эти два метода для получения среднего значения возвращают разные значения. Второй бит кода запутан, я знаю. Этот вопрос не о том, чтобы сделать код лучше, а о том, в чем разница, почему они дают разные результаты.

Спасибо!

data(iris)
sepal_avg <- select(iris, starts_with("Sepal")) %>% rowMeans()

iris$id <- c(1:length(iris$Sepal.Length))
sepal_avg2 <- iris %>% group_by(id) %>% summarise(sepal_average = mean(Sepal.Length:Sepal.Width))

sepal_avg == sepal_avg2$sepal_average

Ответы [ 2 ]

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

mean(c(x,y)) дает среднее значение x и y, но вы написали mean(x:y) с оператором :, который представляет собой последовательность чисел от x до y (попробуйте? `: `в консоли для получения дополнительной информации).Это эквивалентно целым числам, но обратите внимание, что они разные:

> mean(2.1:12.6)
[1] 7.1
> mean(c(2.1, 12.6))
[1] 7.35

, потому что:

> 2.1:12.6
 [1]  2.1  3.1  4.1  5.1  6.1  7.1  8.1  9.1 10.1 11.1 12.1
1 голос
/ 19 апреля 2019

Вы неправильно используете столбцы во втором подходе.

Следующий код не соответствует ожиданиям:

summarise(sepal_average = mean(Sepal.Length:Sepal.Width))

Аргумент mean равен Sepal.Length:Sepal.Width, и когда он выполняется, он не принимает эти два столбца.

Вместо этого он заменяет имена столбцов на значения столбцов и генерирует регулярную последовательность с помощью ::

> 5.1:3.5
[1] 5.1 4.1
> mean(5.1:3.5)
[1] 4.6

Средний результат - это именно то, что вы получили за id = 1.

Вместо этого вы должны передать значения:

sepal_average = mean(c(Sepal.Length, Sepal.Width))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...