Рассмотрим этот фрейм данных:
library(dplyr)
df <- data.frame(id = c(1,1,1,2,2), x = 1:5)
id x
1 1 1
2 1 2
3 1 3
4 2 4
5 2 5
Чтобы получить средние значения x для каждого идентификатора, я использую
df |> group_by(id) |> dplyr::summarise(group_mean = mean(x))
# A tibble: 2 × 2
id group_mean
<dbl> <dbl>
1 1 2
2 2 4.5
Мне нужно вычислить среднее значение этих групповых средних, которое равно (2 + 4,5) / 2 = 3,25. Однако этот код терпит неудачу:
df |> group_by(id) |> dplyr::summarise(group_mean = mean(x)) |> mean(group_mean)
[1] NA
Warning message:
In mean.default(dplyr::summarise(group_by(df, id), group_mean = mean(x)), :
argument is not numeric or logical: returning NA
Какие-либо предложения?
Обновлено: Этот вопрос не похож на введите описание ссылки здесь, как упоминал @shizzle, потому что я ищу несбалансированное среднее значение, то есть второй этап агрегирования, а не первый этап расчета средних значений.
Этот вопрос похож на: Рассчитайте среднее значение по группе. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.
@G.Grothendieck Спасибо за ваше беспокойство, но это несбалансированное среднее значение - это именно то, что мне нужно вычислить.
Вы можете просто pull
столбец со значениями и вычислить mean
после него следующим образом:
library(dplyr)
df |>
group_by(id) |>
dplyr::summarise(group_mean = mean(x)) |>
pull(group_mean) |>
mean()
#> [1] 3.25
Created on 2024-07-31 with reprex v2.1.0
@margusl Ты прав, извини, спасибо!
Вам нужно разгруппировать данные, а затем вычислить среднее значение всех значений group_mean
в новом столбце, например:
df |>
group_by(id) |>
summarise(group_mean = mean(x)) |>
ungroup() |>
mutate(second_mean = mean(group_mean))
# # A tibble: 2 × 3
# id group_mean second_mean
# <dbl> <dbl> <dbl>
# 1 1 2 3.25
# 2 2 4.5 3.25
В базе
> df = data.frame(id = c(1,1,1,2,2), x = 1:5)
> mean(aggregate(x~id, df, mean)$x)
[1] 3.25
Данные несбалансированы, поэтому среднее значение средних не равно среднему значению исходных значений x. Вы уверены, что хотите этого?