R - средние значения чисел в последовательности в столбце фрейма данных

Я пытаюсь вычислить среднее значение значений в столбце (y), которые последовательно подсчитываются (1, 2, 3 и т. д.) в другом столбце (x). Пример кадра данных показан ниже.

> df
   x  y
1  1 15
2  2 20
3  4 16
4  5 12
5  6 17
6  8 14
7  9 13
8 10 19

Я хотел бы получить векторный результат, который будет считывать средние значения чисел в числовой последовательности. Искомый вектор будет выглядеть так: 17,5 15 15,33333.

Я не уверен, что это лучший способ получить желаемый результат, но я пытался и не смог создать цикл for, используя diff(df[,1]), чтобы найти точки останова.

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

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
3
0
37
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Создайте столбец группировки из diff, используя cumsum на логическом векторе

with(df, tapply(y, cumsum(c(TRUE, diff(x) != 1)), FUN = mean))

-выход

  1        2        3 
17.50000 15.00000 15.33333 

данные

df <- structure(list(x = c(1L, 2L, 4L, 5L, 6L, 8L, 9L, 10L), y = c(15L, 
20L, 16L, 12L, 17L, 14L, 13L, 19L)), class = "data.frame",
 row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8"))
with(df, tapply(y, x-seq(x), mean)) тоже отлично сработает
onyambu 22.04.2022 20:07

Код Обновлять: сокращен на 2 строки:

df %>% 
  group_by(id_Group =cumsum(x-lag(x, default = x[1])>=2)) %>% 
  summarise(mean = mean(y, na.rm=TRUE)) %>% 
  pull(mean)

Вот dplyr версия:

  1. рассчитать разницу между запаздывающими x
  2. создать группу с cumsum(diff>=2)
  3. вычислить среднее значение и pull вектор.
library(dplyr)

df %>% 
  mutate(diff= x-lag(x, default = x[1])) %>% 
  group_by(id_Group =cumsum(diff>=2)) %>% 
  mutate(mean = mean(y, na.rm=TRUE)) %>% 
  slice(1) %>% 
  pull(mean)
[1] 17.50000 15.00000 15.33333

Другие вопросы по теме