t.d
V1 V2 V3 V4
1 1 6 11 16
2 2 7 12 17
3 3 8 13 18
4 4 9 14 19
5 5 10 15 20
names(t.d) <- c("ID","A","B","C")
t.d$FinalTime <- c("7/30/2009 08:18:35","9/30/2009 19:18:35","11/30/2009 21:18:35","13/30/2009 20:18:35","15/30/2009 04:18:35")
t.d$InitTime <- c("6/30/2009 9:18:35","6/30/2009 9:18:35","6/30/2009 9:18:35","6/30/2009 9:18:35","6/30/2009 9:18:35")
>t.d
ID A B C FinalTime InitTime
1 1 6 11 16 7/30/2009 08:18:35 6/30/2009 9:18:35
2 2 7 12 17 9/30/2009 19:18:35 6/30/2009 9:18:35
3 3 8 13 18 11/30/2009 21:18:35 6/30/2009 9:18:35
4 4 9 14 19 13/30/2009 20:18:35 6/30/2009 9:18:35
5 5 10 15 20 15/30/2009 04:18:35 6/30/2009 9:18:35
второго DF:
> s.d
F D E Time
1 10 19 28 6/30/2009 08:18:35
2 11 20 29 8/30/2009 19:18:35
3 12 21 30 9/30/2009 21:18:35
4 13 22 31 01/30/2009 20:18:35
5 14 23 32 10/30/2009 04:18:35
6 15 24 33 11/30/2009 04:18:35
7 16 25 34 12/30/2009 04:18:35
8 17 26 35 13/30/2009 04:18:35
9 18 27 36 15/30/2009 04:18:35
Выхода быть:
С DF «td» Мне нужно рассчитать временной интервал для каждой строки между «FinalTime» и «InitTime» (InitTime всегда будет меньше FinalTime).
Другая DF «temp» из «sd» должна быть сформирована с данными только в пределах указанного временного интервала, а затем должны быть приняты и присоединены самые последние значения «F», «D», «E» к «i-ой» строке «td», из которой был рассчитан временной интервал.
Кроме того, мы должны видеть, если новоиспеченная DF «Темп» имеет истинные следующие условия:
здесь «J» представляет собой значение для каждой строки:
if(temp$F[j] < 35.5) + (temp$D[j] >= 100) >= 1)
{
temp$Flag <- 1
} else{
temp$Flag <- 0
}
Первоначально у меня есть 3 миллиона строк в кадре данных и 20 столбцах в каждом DF.
Я решил проблему выше, используя «для цикла», но это, очевидно, занимает от 2 до 3 дней, так как есть много строк.
(Кроме того, если я должен добавить новые столбцы в результирующей DF, если несколько условий получить выполняется на каждой строке?)
Кто-нибудь может предложить другой метод? Как использовать функции приложения?
Я не знаю точно, но общая функция из пакета dplyr, кажется, что вы ищете. – Llopis
Прежде всего, ваши столбцы datetime должны иметь соответствующий тип. Поместите эти столбцы в 'POSIXct'. Затем рассмотрим функцию 'foverlaps'' data.table'. – nicola