как использовать group_by в r для решения моей проблемы. есть еще солн? - PullRequest
0 голосов
/ 26 мая 2020

ДАННЫЕ В ФРЕЙМЕ ДАННЫХ ВЫГЛЯДЯТ ТАКЖЕ

DATE       EXPIRY_Date  strikeprice  daystoexpiry  closeprice
1/1/2019   1/7/2019      1500           6             50
1/1/2019   1/7/2019      1600           6             25
1/1/2019   1/7/2019      1700           6             20
1/1/2019   1/14/2019      1500          13            75
1/1/2019   1/14/2019      1600          13            50
1/1/2019   1/14/2019      1700          13            35
1/1/2019   1/14/2019      1800          13            25
1/1/2019   1/14/2019      1900          13            15
1/1/2019   1/21/2019      1500          20            100
1/1/2019   1/21/2019      1600          20            70
1/1/2019   1/28/2019      1500          27            130
1/1/2019   1/28/2019      1600          27            85
1/1/2019   1/28/2019      1700          27            70
1/2/2019   1/7/2019      1500           5             40
1/2/2019   1/7/2019      1600           5             16
1/2/2019   1/7/2019      1700           5             10
1/2/2019   1/14/2019     1500           12            50
1/2/2019   1/14/2019     1600           12            50
1/2/2019   1/14/2019     1700           12            50
1/2/2019   1/21/2019     1500           19            75
1/2/2019   1/21/2019     1600           19            60
1/2/2019   1/21/2019     1700           19            40
1/2/2019   1/282019      1500           26            50

Для каждой даты существуют разные данные о сроках годности. Я хочу, чтобы данные были организованы таким образом, чтобы для каждой даты самая низкая строка dte попадала в один фрейм данных. так что у меня будет один фрейм данных всех дат с самым низким значением dte для этой даты. тогда мне нужен другой фрейм данных, который будет содержать данные всех дат со вторым наименьшим dte, а третий младший dte - это dataframe

выходной сигнал выглядит так

DATE       EXPIRY_Date  strikeprice  daystoexpiry  closeprice
1/1/2019   1/7/2019      1500           6             50
1/1/2019   1/7/2019      1600           6             25
1/1/2019   1/7/2019      1700           6             20
1/2/2019   1/7/2019      1500           5             40
1/2/2019   1/7/2019      1600           5             16
1/2/2019   1/7/2019      1700           5             10

другой выходной файл данных

DATE       EXPIRY_Date  strikeprice  daystoexpiry  closeprice
1/1/2019   1/14/2019      1500          13            75
1/1/2019   1/14/2019      1600          13            50
1/1/2019   1/14/2019      1700          13            35
1/1/2019   1/14/2019      1800          13            25
1/1/2019   1/14/2019      1900          13            15
1/2/2019   1/14/2019      1500          12            50
1/2/2019   1/14/2019      1600          12            50
1/2/2019   1/14/2019      1700          12            50

3-й выход datafrmae

DATE       EXPIRY_Date  strikeprice  daystoexpiry  closeprice
1/1/2019   1/21/2019      1500          20            100
1/1/2019   1/21/2019      1600          20            70
1/2/2019   1/21/2019      1500          19            75
1/2/2019   1/21/2019      1600          19            60
1/2/2019   1/21/2019      1700          19            40

1 Ответ

0 голосов
/ 26 мая 2020

Вы должны сгруппировать по DATE и найти минимум daystoexpiry. Использование пакета dplyr дает вам

# minimum
df %>%
  group_by(DATE) %>%
  filter(daystoexpiry == min(daystoexpiry))

# second lowest
df %>%
  group_by(DATE) %>%
  filter(daystoexpiry == sort(unique(daystoexpiry))[2])

# third lowest
df %>%
  group_by(DATE) %>%
  filter(daystoexpiry == sort(unique(daystoexpiry))[3])
...