Вот метод с пакетом data.table
library(data.table)
library(stringi)
dt <- as.data.table(DF)
# convert from wide to long
ldt <- melt(dt, id.vars = "ID")
# split out variable from time indication
ldt[, time_id := as.integer(stringi::stri_extract_first_regex(variable, "\\d*$"))]
ldt[, variable2 := stringi::stri_replace_all_regex(variable, "\\d*$", "")]
# functions for E,F,G
getE <- function(var, val, time){
w <- time[var=="TEST"][which(val[var == "TEST"] == 1)]
if(length(w) > 0){
t <- max(1, min(w)-1)
}else{
t <- max(time[var=="TEST" & !is.na(val)])
}
out <- val[time == t & var == "YEAR"]
out
}
getFG <- function(var, val, col="TEST"){
x <- val[var=="YEAR"]
y <- val[var==col]
w <- which(y==1)
if(length(w)==0){
w <- which(x == max(x[!is.na(y)]))
}else{
w <- min(w, na.rm=TRUE)
}
out <- x[w]
out
}
# data.table aggreggation method
out <- ldt[, .(
B = as.integer(any(value[variable2 == "TEST"] == 1, na.rm=TRUE))
, C = as.integer(any(value[variable2 == "DROP"] == 1, na.rm=TRUE))
, D = min(value[variable2 == "YEAR"], na.rm=TRUE)
, E = getE(variable2, value, time_id)
, F = getFG(variable2, value, "TEST")
, G = getFG(variable2, value, "DROP")
), by = .(A=ID)]
# back to data.frame
out <- as.data.frame(out)
out
# test
# is C[3] correct?
out == DF_NEW
. Это - число минут с полуночи в пятиминутных интервалах. Ваш диапазон значений должен быть от 0 до 1440
день разделен на 1 000 равных частей. очень метрический в целом.
Я думаю, что Вы были бы лучшими от выяснения у исходных авторов...
С другой стороны, можно ли вставить дату в старую систему и экспортировать ли ее? Если можно сделать это затем, необходимо смочь перепроектировать его очень легко.
Я видел некоторые системы, где дата хранится в специальной таблице и в другом месте как идентификатор к нему. Это могло бы быть одним из них
Вот решение... спасибо....
hmoya
9:00:00 540 9:15:00 555 9:30:00 570 9:45:00 585 10:00:00 600 10:15:00 615 10:30:00 630 10:45:00 645 11:00:00 660 11:15:00 675 11:30:00 690 11:45:00 705 12:00:00 720 12:15:00 735 12:30:00 750 12:45:00 765 13:00:00 780 13:15:00 795 13:30:00 810 13:45:00 825 14:00:00 840 14:15:00 855 14:30:00 870 14:45:00 885 15:00:00 900 15:15:00 915 15:30:00 930 15:45:00 945 16:00:00 960 16:15:00 975 16:30:00 990 16:45:00 1005 17:00:00 1020 17:15:00 1035 17:30:00 1050 17:45:00 1065 18:00:00 1080 18:15:00 1095 18:30:00 1110 18:45:00 1125 19:00:00 1140
Они, как, предполагается, представляют даты или времена? Если даты, то они - вероятно, просто смещение с 'известной' эпохи (как time_t секунды с 1 января 70).
Если у Вас не будет документации для нахождения эпохи, то Вам будет нужен пример для работы ее из.
Это представляет время, никакую дату. И разовое кодом то же появляется на другой дате.
Нет никакого способа знать наверняка. Я мог быть ударами, но с другой стороны, это не могло бы быть.