Рассчитать среднее значение после последнего указания конкретной колонки - PullRequest
0 голосов
/ 03 октября 2018
example.df <- data.frame(GY = sample(300:600, 200, replace = T), sacc 
                     = rep("f", each = 100), trial.number = rep(1:2, 
each = 100), stringsAsFactors = F)
example.df$sacc[50:70] <- "s"
example.df$sacc[164:170] <- "s"

У меня есть данные, похожие на это.Я хотел бы рассчитать среднее значение GY после последнего появления «s» для всех остальных значений GY, где sacc равно f.В этом примере я мог бы, конечно, усреднить только индекс с номером 71: 100, однако в реальных данных это не так.

То, что я попробовал после комментария Ронак (спасибо!):

library(dplyr)
example.df %>%
   group_by(trial.number) %>%
   summarise(mean_tr = mean(GY[(max(which(sacc == "s")) + 1) : n()])) 
%>%
   data.frame()

Я не могу заставить его работать.Кто-нибудь может мне помочь ?Мой оригинальный data.frame состоит из 70 тыс. Строк и состоит из множества переменных.класс = data.frame.

1 Ответ

0 голосов
/ 03 октября 2018

Обновление

Поскольку нам нужно сделать это по группам, мы можем split сделать это на trial.number и затем применить ту же операцию к каждой группе.

sapply(split(example.df, example.df$trial.number), function(x)
         mean(x$GY[(max(which(x$sacc == "s")) + 1) : nrow(x)]))

#   1        2 
#446.2333 471.7000 

То же самое с использованием dplyr может быть достигнуто с помощью

library(dplyr)
example.df %>%
   group_by(trial.number) %>%
   summarise(mean_tr = mean(GY[(max(which(sacc == "s")) + 1) : n()])) %>%
   data.frame()

# trial.number  mean_tr
#1            1 446.2333
#2            2 471.7000

Подтверждение еще раз,

mean(example.df$GY[71:100])
#[1] 446.2333

mean(example.df$GY[171:200])
#[1] 471.7

Оригинальный ответ

Мы могли бы сделать

mean(example.df$GY[(max(which(example.df$sacc == "s")) + 1) : nrow(example.df)])
#[1] 443.6667

Здесь мы сначала получаем все индексы, где sacc - это "s", а затем получаем max для получения последнего вхождения.Мы получаем среднее значение GY значений от этого индекса до конца кадра данных (nrow(example.df)).

Для подтверждения

mean(example.df$GY[71:100])
#[1] 443.6667
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...