У меня есть 2 кадра данных.Во-первых, я называю «tableA», имеет время начала, время окончания и номер, связанный с ним (столбцов намного больше, но это единственные релевантные).Мой второй df "tableB" и имеет метку времени.Вот некоторые примеры данных:
tableA <- data.frame("start" = 1:5, "stop"= 2:6, "numb" = 11:15)
tableB <- data.frame("timeStamp" = c(1.7, 2.1, 2.4, 2.8, 4.5), "numb" = 0)
Что приведет к тому, что кадры будут выглядеть следующим образом:
tableA tableB
start stop numb timeStamp numb
1 2 11 1.7 0
2 3 12 2.1 0
3 4 13 2.4 0
4 5 14 2.8 0
5 6 15 4.5 0
Я пытаюсь пометить все метки времени в таблицеB с помощьюсоответствующий номер в таблице A, когда он попадает между временем начала и окончания.Например, для первой строки в таблице B (1.7) он получит число 11 (поскольку оно находится между 1 и 2).Поэтому для этих данных я бы хотел, чтобы tableB выглядела следующим образом:
tableB
timeStamp numb
1.7 11
2.1 12
2.4 12
2.8 12
4.5 14
Для этого я написал следующий оператор вложенного цикла:
for(n in 1:length(tableB$timeStamp)) {
for(i in 1:length(tableA$numb)) {
if(tableB$timeStamp[n] > tableA$start[i] &
tableB$timeStamp[n] < tableA$stop[i]) {
tableB$numb[n] <- tableA$numb[i]
sprintf("n = %i", n)
sprintf("i = %i", i)}
}
}
Однако всезначения в tableB $ numb просто меняются на 5, и на консоль ничего не выводится.Я не уверен, что я здесь испортил, так как кажется, что он никогда даже не входит в оператор if, и все же tableB $ numb обновляется неправильно.Любые советы или помощь будет высоко ценится!