Мне нужно пропустить кадр данных, прочитать значение трех столбцов (2 метки времени и 1 метка). Затем для этой строки из трех значений мне нужно сравнить с каждой строкой второго блока данных, чтобы увидеть, совпадает ли A) ярлык, и B) временная метка, которая находится во втором фрейме данных, находится между двумя временными метками текущей строки. Если строка действительно соответствует этим двум критериям, она должна быть сохранена в dataframe/vector для дальнейшей обработки.Для каждой строки в фрейме данных, петля через другой фрейм данных
Я пробовал много версий функции x_apply в сочетании с циклом for (для «второй» итерации). Ниже приведена очень упрощенная версия моей проблемы, где я создаю два небольших фрейма и пытаюсь установить требуемый цикл. Значение должно быть сохранено в «x» - и пока это значение отображается, когда я печатаю (x) в цикле, «x» считается NULL после завершения функции приложения. Кажется, что он сбрасывается каждый раз, когда вызывается функция. Принимая во внимание мои требования, есть ли у вас идеи для другого/лучшего подхода? Я не обязан применять само по себе. Заранее большое спасибо!
label <- c("p1", "p1", "p2")
value_1 <- c(8,4,2)
value_2 <- c(10,6,9)
df1 <- data.frame(label, value_1, value_2)
label <- c("p1", "p2", "p2")
value_3 <- c(8,8,8)
df2 <- data.frame(label, value_3)
x = NULL
small_function <- function(value_1, value_2, label) {
for(i in 1:nrow(df2[df2$label == label,])) {
print(i)
x <- append(x, i)
print(x)
}
}
apply(df1, 1, function(x,y,z) small_function(df1$value_1, df1$value_2, df1$label))
x
Update: пример с датами времени, что приводит к ошибке «Ожидая одно значение» для меня.
label <- c("p1", "p1", "p2")
value_1 <- c(as.POSIXct(1482645600, origin="1970-01-01"),as.POSIXct(1482745600, origin="1970-01-01"),as.POSIXct(1482845600, origin="1970-01-01"))
value_2 <- c(as.POSIXct(1582645600, origin="1970-01-01"),as.POSIXct(1582745600, origin="1970-01-01"),as.POSIXct(1582845600, origin="1970-01-01"))
df1 <- data.frame(label, value_1, value_2)
label <- c("p1", "p2", "p2")
value_3 <- c(as.POSIXct(1582645100, origin="1970-01-01"),as.POSIXct(1582745200, origin="1970-01-01"),as.POSIXct(1582845300, origin="1970-01-01"))
df2 <- data.frame(label, value_3)
df_merge = merge(df1, df2, c("label"), suffixes = c(".df1",".df2"))
setDT(df_merge)
str(df_merge)
a <- df_merge[between(value_3, value_1, value_2), ]
слияния первой а затем примените условия вашего диапазона! –