R: создать новый столбец на основе нескольких условий двух столбцов с датами - PullRequest
2 голосов
/ 19 марта 2020

У меня есть фрейм данных, который выглядит следующим образом (короткий пример):

df

date (dd-mm-yyyy)

date1        date2        Value
01-01-2016   01-01-2016   100
01-02-2016   01-01-2016   90
01-03-2016   01-01-2016   110
01-02-2016   01-02-2016   180
01-03-2016   01-02-2016   80
01-04-2016   01-02-2016   100
01-05-2016   01-02-2016   70
01-03-2016   01-03-2016   90
01-04-2016   01-03-2016   100
01-05-2016   01-03-2016   80

Я хочу создать новый столбец на основе следующих критериев: если date1 = date2 (например, 01-02-2016 = 01-02-2016) мне нужно поместить в новый столбец «Value_new» значение из столбца «Value» из строки, где date1 = date2 - один месяц (например, 01-02-2016 = 01-01-2016). В случае, если для date1 = date2 нет значения - один месяц доступен, новое значение должно быть равно 0.

Вывод должен быть таким:

date1        date2        Value  Value_new
01-01-2016   01-01-2016   100    0
01-02-2016   01-01-2016   90     0
01-03-2016   01-01-2016   110    0
01-02-2016   01-02-2016   180    90
01-03-2016   01-02-2016   80     0
01-04-2016   01-02-2016   100    0
01-05-2016   01-02-2016   70     0
01-03-2016   01-03-2016   90     80
01-04-2016   01-03-2016   100    0
01-05-2016   01-03-2016   80     0

Я пытался решить это с помощью следующего кода, но он не работает должным образом:

df$Value_new <- 0
df$Value_new[df$date1==df$date2] <- df$Value[(df$date1 == (df$date2 - months(1))]

Я новичок в программировании на R и буду благодарен за каждое предложение.

1 Ответ

1 голос
/ 20 марта 2020

Вы должны быть более точными c о том, из какого столбца Значение вы берете данные. Я не могу ничего кодировать, потому что даже я не уверен. Если бы я был тобой, я бы конвертировал все из дат в формат нумерации c, чтобы все было просто. Таким образом, вы все равно можете сохранить 1 месяц, обнаружив разницу между наблюдениями в столбцах и между ними. Разница будет равна 10000. Однако я не понимаю, что вы пытаетесь вернуть в Value_new. Я понимаю, что вы пытаетесь вычесть значение из значения в данной строке, где date1 == date2, но это все. В фрейме данных есть повторы месяцев, так как R узнает, из какого из них взять?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...