Использование вложенного цикла в R для вычисления минимального и максимального значения в диапазоне уникальных идентификаторов и дней - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь перебрать и вернуть расчет минимального и максимального значения для диапазона уникальных идентификаторов в течение нескольких дней. Я пытался перебирать дни, а затем каждое уникальное значение дней, но не совсем так, как я хочу, я получаю «список из 4», в котором есть все итерации для идентификаторов, но нет данных для всего остального.

days<-c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5)
id<-c(1.1,1.1,1.2,1.2,1.1,1.2,1.2,1.1,1.2,1.2,1.2,1.1,1.1,1.1,1.1)
a<-c(1,3,1,5,1,5,2,3,1,5,2,1,4,5,3)

df=data.frame(days,id,a)

newdf<-NULL
daylist<-unique(df$days)
idlist<-unique(df$id)

for (d in daylist) {
  for (i in idlist) {

    minvalue<-min(df$a)
    maxvalue<-max(df$a)
    newdf$minValue[i]<-minvalue
    newdf$maxValue[i]<-maxvalue
    newdf$day<-d
    newdf$ID<-i

  }
}

Я хочу, чтобы каждая строка фрейма выходных данных состояла из значения ID, дня, максимума и минимума a для каждого дня.

Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете использовать dplyr и group_by. Ибо петли очень медленны в R.

> library("dplyr")
> df %>% group_by(days, id) %>% summarise(minvalue = min(a), maxvalue = max(a))

   days    id minvalue maxvalue
  <dbl> <dbl>    <dbl>    <dbl>
1  1.00  1.10     1.00     3.00
2  1.00  1.20     1.00     1.00
3  2.00  1.10     1.00     1.00
4  2.00  1.20     5.00     5.00
5  3.00  1.10     3.00     3.00
6  3.00  1.20     1.00     2.00
7  4.00  1.10     1.00     1.00
8  4.00  1.20     2.00     5.00
9  5.00  1.10     3.00     5.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...