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

У меня есть фрейм данных, где на каждый день у меня есть несколько цен.Я хотел бы изменить мой фрейм данных следующим кодом:

newdf <- Data %>%    
 filter(
if (Data$Date == Data$Echeance) {
  Data$Close == lag(Data$Close,1)
} else {
  Data$Close == Data$Close
}
) 

Однако он не дает мне то, что я хочу, а именно: создать новый фрейм данных, где переменная Close принимает свое нормальное состояниезначение, если день Date не равен дню Echeance.В этом случае примите следующее значение Close.Я добавил фильтр, потому что хотел удалить повторяющиеся даты и хранить только одну дату в день, когда Close удовлетворяет условию выше.

Нет сообщения об ошибке, просто оно не дает мне нужную базу данных,

Вот проблеск моих данных:

 Date                Echeance            Compens.  Open  Haut   Bas Close 

1 1998-03-27 00:00:00 1998-09-10 00:00:00     125.   828   828   820  820.   197     
2 1998-03-27 00:00:00 1998-11-10 00:00:00     128.   847   847   842  842.   124     
3 1998-03-27 00:00:00 1999-01-11 00:00:00     131.   858   858   858  858.     2     
4 1998-03-30 00:00:00 1998-09-10 00:00:00     125.   821   821   820  820.    38     
5 1998-03-30 00:00:00 1998-11-10 00:00:00     129.   843   843   843  843.     1     
6 1998-03-30 00:00:00 1999-01-11 00:00:00     131.   860   860   860  860.     5     

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

1 Ответ

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

Звучит как вариант использования для ifelse, с dplyr:

library(dplyr)
Data %>%
    mutate(Close = ifelse(Date==Echeance, lead(Close,1), Close))

Вот пример:

dat %>% 
  mutate(var_new = ifelse(date1==date2, lead(var,1), var))

# A tibble: 3 x 4
# date1      date2        var var_new
# <date>     <date>     <int>   <int>
# 1 2018-03-27 2018-03-27    10      11
# 2 2018-03-28 2018-01-01    11      11
# 3 2018-03-29 2018-02-01    12      12

Функция lead будет перемещать вектор на1 позиция.Также обратите внимание, что я создал var_new только для того, чтобы показать разницу, но вы можете напрямую изменить var.

Используемые данные:

dat <- tibble(date1 = seq(from=as.Date("2018-03-27"), to=as.Date("2018-03-29"), by="day"),
              date2 = c(as.Date("2018-03-27"), as.Date("2018-01-01"), as.Date("2018-02-01")),
              var = 10:12)
dat
# A tibble: 3 x 3
# date1      date2        var
# <date>     <date>     <int>
# 1 2018-03-27 2018-03-27    10
# 2 2018-03-28 2018-01-01    11
# 3 2018-03-29 2018-02-01    12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...