Мне нужно добиться 3 вещей:
- Отдельные строки, разделенные по Col: «Дата», содержат разные годы.
- ИСКЛЮЧИТЬ Col: «Исправитьmsgstr "только сохранить строку ПЕРВАЯ в группе содержит данные.
Рассчитать Кол: "Цена" в четных делится на число разделенных строк.
# Dataset call df
Name Fix Price Date
Tom 600 500 2016-01-01
John 800 400 2016-01-03;2016-01-09
Mary 1100 1000 2016-01-04;2017-09-01;2017-08-10;2018-01-01
Joe 30 25 2016-01-04;2017-09-01
Paul 400 304 2015-01-02
Alex 505 238 2018-01-02;2018-02-02
# Targeted df
Name Fix Price Date
Tom 600 500 2016-01-01
John 800 400 2016-01-03;2016-01-09
Mary 1100 250 2016-01-04
Mary 0 250 2017-09-01
Mary 0 250 2017-08-10
Mary 0 250 2018-01-01
Joe 30 12.5 2016-01-04
Joe 0 12.5 2017-09-01
Paul 400 304 2015-01-02
Alex 505 238 2018-01-02;2018-02-02
У меня есть подход для достижения 1 и 3, но я не могу сделать 2, что я не знаю никакой функции Diverse fill ().
# Find the SPLIT TARGET first :
inds <- sapply(strsplit(df$Date, ";"), function(x)
length(unique(format(as.Date(x), "%Y"))) > 1) ### This approach actually
does not works in my actual data when over 1 Million rows , i chunk it into a smaller data
to fit this approach's limit.
library(tidyverse)
library(stringr)
#Select those indices
df[inds, ] %>% mutate(Price = Price / (str_count(Date,";") + 1)) %>%
separate_rows(Date, sep = ";") %>%
bind_rows(df[!inds,])
* Пожалуйста, напомните, что вы не можете использовать Col: «Name» для чего-то, поскольку они просто представляют, что в наборе данных есть другие значения, которые необходимо скопировать на separate_rows
Как я могу очистить пункт 2?Его сводит меня с ума. Спасибо за любые комментарии в авансах