Просто чтобы завершить все предыдущие ответы, если у вас есть несколько значений с именами R1
, R2
, .... R100
, вместо записи всех их в функцию mean
, вас может заинтересовать преобразовать ваш фрейм данных в более длинный формат с помощью функции pivot_longer
, а затем сгруппировать по событию и вычислить среднее значение. Наконец, используя pivot_wider
, вы можете перевести ваш фрейм данных в исходный более широкий формат.
library(dplyr)
library(tidyr)
df %>% mutate_at(vars(contains("R")), as.numeric) %>%
pivot_longer(cols = starts_with("R"), names_to = "R", values_to = "Values") %>%
group_by(Event) %>%
mutate(average = mean(Values, na.rm = TRUE)) %>%
pivot_wider(names_from = R, values_from = Values)
# A tibble: 2 x 8
# Groups: Event [2]
Subject Event Average average R1 R2 R3 R4
<int> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 A 2.5 1.67 1 2 2 NA
2 1 B 1 1 1 1 1 1
Как уже упоминалось @TTS, в вычислении среднего значения события A что-то не так.
Воспроизводимый пример
structure(list(Subject = c(1L, 1L), Event = c("A", "B"), R1 = c(1L,
1L), R2 = 2:1, R3 = 2:1, R4 = c("N/A", "1"), Average = c(2.5,
1)), row.names = c(NA, -2L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x5555743c1310>)