R- создать новую переменную с мутацией в диапазоне строк - PullRequest
0 голосов
/ 15 октября 2018

этот вопрос похож на мой предыдущий вопрос.

Я работаю над финансовыми данными, которые хочу "свернуть" в первый день месяца истечения.Вот мой код, который неверен, по крайней мере, в части mutate:

newdf2<-Data %>%
  mutate(Close_exp= ifelse(as.Date(Date==Echeance)-10, lead(Close,1), Close))

newdf2= newdf2[!duplicated(newdf2$Date),]

Я пытаюсь сделать следующее: создать новую переменную с именем Close_exp, которая принимает значениеClose, за исключением 10 дней до дня Echeance.В этом случае он примет следующее значение Close.

РЕДАКТИРОВАТЬ: Другими словами, поскольку Echeance является десятым днем ​​некоторых определенных месяцев, ему следует присвоить значение «следующего закрытия» с первого дня месяца Echeance, чтобы10-го числа месяца Эханс.Например, скажем, Echeance - 10 сентября, я ищу способ выбрать 10 первых дней сентября.

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

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  

Вот данные в формате Dput:

 structure(list(Date = structure(c(890956800, 890956800, 890956800, 
 891216000, 891216000, 891216000, 891302400, 891302400, 891302400, 
 891388800, 891388800, 891388800, 891388800, 891475200, 891475200, 
 891475200, 891475200, 891561600, 891561600, 891561600), class =      c("POSIXct", 
 "POSIXt"), tzone = "UTC"), Echeance = structure(c(905385600, 
 910656000, 916012800, 905385600, 910656000, 916012800, 905385600, 
 910656000, 916012800, 905385600, 910656000, 916012800, 936921600, 
 905385600, 910656000, 916012800, 936921600, 905385600, 910656000, 
 916012800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), Compens. =      c(125.00819413, 
 128.36207251, 130.80125679, 125.00819413, 128.51452153, 131.10615482, 
 125.16064315, 128.81941957, 130.95370581, 125.00819413, 128.97186858, 
 130.95370581, 131.10615482, 124.85574512, 129.1243176, 130.95370581, 
 131.10615482, 123.63615298, 128.36207251, 130.49635876), Open = c(828, 
 847, 858, 821, 843, 860, 820, 844, 860, 820, 846, 859, 860, 819, 
 846, NA, NA, 817, 845, NA), Haut = c(828, 847, 858, 821, 843, 
 860, 821, 845, 860, 820, 846, 859, 860, 819, 847, NA, NA, 817, 
 845, NA), Bas = c(820, 842, 858, 820, 843, 860, 820, 844, 860, 
 820, 846, 859, 860, 819, 846, NA, NA, 811, 842, NA), Close = c(819.999999969324, 
 841.999999974421, 858.00000000198, 819.999999969324, 842.999999992542, 
 859.999999972627, 820.999999987445, 845.000000028785, 859.000000020102, 
 819.999999969324, 845.999999981311, 859.000000020102, 859.999999972627, 
 819.000000016798, 846.999999999432, NA, NA, 811.000000003019, 
 841.999999974421, NA), Vol_Q = c(197, 124, 2, 38, 1, 5, 56, 85, 
 10, 10, 103, 10, 2, 30, 70, 0, 0, 145, 150, 0), Bloc_Q = c(NA_real_, 
 NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
 NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
 NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), Trades = c(NA_real_, 
 NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
 NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
 NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), `Vol_€` =      c(1231330.7121805, 
 795844.849562, 13080.125679, 237515.568847, 6425.7260765, 32776.538705, 
 350449.80082, 547482.5331725, 65476.852905, 62504.097065, 664205.123187, 
 65476.852905, 13110.615482, 187283.61768, 451935.1116, 0, 0, 
 896362.109105, 962715.543825, 0), O.I. = c(170, 123, 2, 188, 
 124, 7, 244, 184, 17, 192, 267, 27, 2, 222, 337, 27, 2, 347, 
 474, 27)), row.names = c(NA, -20L), class = c("tbl_df", "tbl", 
 "data.frame"))

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

1 Ответ

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

Я все еще не уверен, что следующее делает то, что вы хотите.
Некоторые дни в Echeance равны 10, другие - 11.

library(tidyverse)
library(lubridate)

Data %>%
  mutate(Close_exp = ifelse(day(Echeance) %in% 10:11, Close[day(Date) %in% 1:10], Close))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...