условная группировка на основе значения столбца инварианта группы - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть фрейм данных:

temp = as.data.frame(matrix(c(1,2,2,-3,1,1,2,3,-2,0,2,1,-5,1,1,2,1,3,0,0,3,2,4,-1,1,3,2,2,0,1,3,2,4,3,0), ncol=5,byrow = TRUE))
colnames(temp) = c("ID","srch","utility","reutility","code")

Мне нужно сгруппировать по столбцу "ID". Для любого значения «ID» столбец «srch» остается прежним. Для каждой группы, если srch> 1, мне нужно min (утилита, где код == 1) -max (повторяемость, где код == 0), иначе (т.е. если srch <= 1) мне нужно, чтобы оно было 0. </p>

Это вывод, который мне нужен:

temp = as.data.frame(matrix(c(1,4,2,0,3,-1), ncol=2,byrow = TRUE))
colnames(temp)=c("ID","Val")

Любой код, использующий dplyr, хорош, но приветствуются и другие.

1 Ответ

1 голос
/ 10 февраля 2020

Предполагая, что выход для ID = 2 равен 0, мы можем сделать:

library(dplyr)

temp %>%
  group_by(ID) %>%
  summarise(Val = if(first(srch) > 1) min(utility[code == 1]) - 
                                      max(reutility[code == 0]) else 0)

# A tibble: 3 x 2
#     ID   Val
#  <dbl> <dbl>
#1     1     4
#2     2     0
#3     3    -1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...