Как я могу удалить противоположные значения (например, возмещения) в данных панели? - PullRequest
0 голосов
/ 15 января 2020

Учитывая следующие данные:

id|datee      | price | quant | discrete_x
 1 2018-12-19      4    -3000   A
 1 2018-12-04      4     3000   A
 1 2018-12-21      4     3000   B
 1 2018-12-20      3     2000   A
...

Желаемый результат:

id|datee      | price | quant | discrete_x
 1 2018-12-21      4     3000   B
 1 2018-12-20      3     2000   A
...

В этом случае совершенно ясно, что количество (quant) 3000 возвращается потом снова купил. Я хотел бы удалить две строки для взаимной компенсации. Учитывая, что id и quant совпадают, в то время как возмещение происходит один раз и после покупки соответствующего номера quant, как я смогу удалить все из них для каждого значения id?

До сих пор я рассматривал (но придерживался) две идеи: 1) В пределах упорядоченных значений group_by проверьте более поздние даты в столбце, чтобы увидеть, будет ли quant соответствовать как противоположные значения 2 ) Для l oop в пределах a для l oop

я чувствую, что для l oop в пределах a для l oop лучше, но не уверен, как бы я соответствовал на discrete_x.

Как бы вы подошли? Вы бы использовали для l oop в течение для l oop?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Это очень уродливая реализация, но я думаю, что это может сработать. Мы можем создать столбец фильтрации после группировки по id и упорядочивания по date.

library(dplyr)
library(tidyr)

df %>%
  group_by(id) %>%
  arrange(datee) %>%
  mutate(f = lead(quant) + quant == 0,
         f = ifelse(f, f, lag(f)),
         f = tidyr::replace_na(f, FALSE)) %>%
  filter(!f) %>%
  select(-f)

#> # A tibble: 2 x 6
#> # Groups:   id [1]
#>      id datee      price quant discrete_x    
#>   <dbl> <date>     <dbl> <dbl> <chr>
#> 1     1 2018-12-20     3  2000 A
#> 2     1 2018-12-21     4  3000 B
0 голосов
/ 16 января 2020

Надеюсь, что это решение подойдет для вашей проблемы.

df <- abs(df$quant)
df1 <- df[!duplicated(df[c("id","quant")]),]

при условии, что ваше имя фрейма данных df.

...