Нахождение максимального значения столбца по группе и условию в R - PullRequest
0 голосов
/ 16 мая 2018

У меня есть две таблицы данных в R.

Таблица A имеет ID_A, дни и группы.

Таблица B имеет ID_B, дни, группы и значение_интереса.

Я пытаюсь добавить столбец к A max_value_of_interest, где значением является максимум значения value_of_interest во всех строках группы, где дни в B больше, чем дни в таблице A.

Я попробую описать это по-другому:

Таблица A:

ID_A    days    group
A1      5       X

Я хочу добавить в A столбец, содержащий максимальное значение___ интереса из B, где максимальное значение выбрано из B, где B.group = X и B.days> 5 (больше, чем значение в строке A1).

Я нашел решения для нахождения максимума по группе, но у меня возникают проблемы с выяснением, как добавить условие, чтобы рассматривать только значения, где B.days по группе> A.days.

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

1 Ответ

0 голосов
/ 16 мая 2018

Проще всего пройти по строкам таблицы A. Для каждой строки выберите соответствующие строки B, а затем найдите максимальное значение.

library(tidyverse)
A <- tibble(ID_A=paste("A", 1:5, sep=""), 
            days=seq(5,1,-1), 
            group=c("X", "X", "X", "Y", "Y"),
            max_val=NA)
B <- tibble(ID_B=paste("A", 1:5, sep=""), 
            days=seq(3,7,1), 
            group=c("X", "X", "X", "Y", "Y"),
            val=runif(5))

for (i in 1:nrow(A)){
  B_sel <- B %>%
    filter(group==A$group[i] & days>A$days[i]) 
  if (nrow(B_sel)>0)
    A$max_val[i] <- max(B_sel$val)
}

или

for (i in 1:nrow(A)){
  rows <- which(B$group==A$group[i] & B$days>A$days[i]) 
  if (length(rows)>0)
    A$max_val[i] <- max(B$val[rows])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...