R- для всех дубликатов одного дня - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть база данных, в которой каждый день повторяется несколько раз, поэтому есть несколько строк на одну и ту же дату. (Кстати, я использую пакет lubridate).

Что я хочу сделать, это:

Создайте столбец T1 и столбец T2 первого наименьшего и первого наивысшего значения цены. T1 возвращает пустые ячейки / ячейки NA, за исключением строк, в которых он находит первые самые высокие и самые низкие цены. Тем не менее, и вот где я застрял, я хочу, чтобы он рассмотрел дубликаты вместе. Так что это будет похоже на цикл: для первого набора дубликатов найдите T1 и T2, затем перейдите ко второму набору дубликатов и т. Д. ...

newdf4<-Data %>%
mutate(T1= max(which(settle < 120)))%>%
mutate(T2=min(which(settle> 120)))

Вот как выглядят мои данные:

 <date>     <dttm>               <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <lgl>  <lgl> 
1 2002-01-02 2002-01-10 00:00:00   118   125   125  125.  125.    55 NA     NA    
2 2002-01-02 2002-03-11 00:00:00   125     NA    NA   NA    NA      0 NA     NA    
3 2002-01-02 2002-05-10 00:00:00   128    NA    NA   NA    NA      0 NA     NA    
4 2002-01-02 2002-07-10 00:00:00   127     NA    NA   NA    NA      0 NA     NA    
5 2002-01-02 2002-09-10 00:00:00   130     NA    NA   NA    NA      0 NA     NA    
6 2002-01-02 2002-11-11 00:00:00   180    120   120  120   120      5 NA     NA   

Большое спасибо заранее.

РЕДАКТИРОВАТЬ:

 dput(head(Data))
 structure(list(Date = structure(c(11689, 11689, 11689, 11689, 
 11689, 11689), class = "Date"), Echeance = structure(c(1010620800, 
 1015804800, 1020988800, 1026259200, 1031616000, 1036972800), class =     
 c("POSIXct", "POSIXt"), tzone = "UTC"), Settle = c(118, 125, 128, 127, 
 130, 180), Open = c(125, NA, NA, NA, NA, 120), Haut = c(125, 
 NA, NA, NA, NA, 120), Bas = c(124.75, NA, NA, NA, NA, 120), Close =     
 c(124.75, NA, NA, NA, NA, 120), Vol_Q = c(55, 0, 0, 0, 0, 5), Bloc_Q = c(NA, 
 NA, NA, NA, NA, NA), Trades = c(NA, NA, NA, NA, NA, NA), `Vol_€` =     
 c(343062.5, 
 0, 0, 0, 0, 30000), O.I. = c(908, 3645, 1603, 100, 157, 1210)), row.names =          
 c(NA,-6L), class = c("tbl_df", "tbl", "data.frame"))

1 Ответ

0 голосов
/ 15 ноября 2018

Я бы пошел так.Настройте select, чтобы включить любые столбцы, которые вы хотите.

Data %>%
  group_by(Date)  %>%
  mutate(t1_cond = Settle < 120,
         t2_cond = Settle > 120,
         T1 = if_else(row_number() == which.max(t1_cond) & t1_cond, Settle, NA_real_),
         T2 = if_else(row_number() == which.max(t2_cond) & t2_cond, Settle, NA_real_)) %>%
  select(Date, T1, T2)

# # A tibble: 6 x 3
# # Groups:   Date [1]
#   Date          T1    T2
#   <date>     <dbl> <dbl>
# 1 2002-01-02   118    NA
# 2 2002-01-02    NA   125
# 3 2002-01-02    NA    NA
# 4 2002-01-02    NA    NA
# 5 2002-01-02    NA    NA
# 6 2002-01-02    NA    NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...