#r #data-analysis #data-cleaning
Вопрос:
У меня есть набор данных, который выглядит следующим образом:
data lt;- tribble( ~Date, ~Ticker, ~Close, ~Open, "1989-09-11","COND",77.3292,77.3292, "1989-09-12","COND",77.4435,77.4435, "1989-09-13","COND",76.3118,76.3118, "1989-09-14","COND",75.5309,75.6344, "1989-09-15","COND",75.6598,75.4675)
# A tibble: 5 x 4 Date Ticker Close Open lt;chrgt; lt;chrgt; lt;dblgt; lt;dblgt; 1 1989-09-11 COND 77.3 77.3 2 1989-09-12 COND 77.4 77.4 3 1989-09-13 COND 76.3 76.3 4 1989-09-14 COND 75.5 75.6 5 1989-09-15 COND 75.7 75.5
Проблема в том, что до определенной даты цена закрытия идентична цене открытия. Что я пытаюсь сделать, так это написать функцию, которая проверяет, совпадают ли цена открытия и цена закрытия, и если это так, она заменяет цену открытия ценой закрытия из предыдущей строки. В случае применения к приведенным выше данным он преобразует данные следующим образом:
# A tibble: 5 x 4 Date Ticker Close Open lt;chrgt; lt;chrgt; lt;dblgt; lt;dblgt; 1 1989-09-11 COND 77.3 NA 2 1989-09-12 COND 77.4 77.3 3 1989-09-13 COND 76.3 77.4 4 1989-09-14 COND 75.5 75.6 5 1989-09-15 COND 75.7 75.5
Я пытался сделать это с помощью оператора if, но у меня возникают проблемы, как только я пытаюсь получить значение из предыдущей строки в столбце «Закрыть» до текущего значения «Открыть».
Ответ №1:
В dplyr
, это просто mutate
с. lag
library(dplyr) data %gt;% mutate(Open = if_else(Open == Close, lag(Close), Open)) ## A tibble: 5 x 4 # Date Ticker Close Open # lt;chrgt; lt;chrgt; lt;dblgt; lt;dblgt; #1 1989-09-11 COND 77.3 NA #2 1989-09-12 COND 77.4 77.3 #3 1989-09-13 COND 76.3 77.4 #4 1989-09-14 COND 75.5 75.6 #5 1989-09-15 COND 75.7 75.5