Обычно неоптимальной идеей является использование циклов в r, так как любой умеренный набор данных будет действительно завален.Причина этого указана в других ответах на переполнение стека, если вы заинтересованы.Лучшая практика в r: если вы думаете об использовании цикла for для просмотра всех записей во фрейме данных, используйте вместо этого apply family функций.
Я написал небольшой код нижекоторый должен выполнить задачу довольно быстро и основывается на коде, который вы предоставили.
df$row <- rownames(df)
#Column 1: count occurrences +/- 2hrs within same city
df$col1 <- mapply(function(time, city, row) sum(df[df$row != row,"two.Before"] <= time & df[df$row != row,"two.After"] >= time & df[df$row != row,"loc"] == city),
df$time, df$loc, df$row)
#Column2: count occurrences +/- 2hrs within same city and on a bus
df$col2 <- mapply(function(time, city, bus, row) sum(df[df$row != row,"two.Before"] <= time & df[df$row != row,"two.After"] >= time & df[df$row != row,"loc"] == city & df[df$row != row,"type"] == "Bus"),
df$time, df$loc, df$type, df$row)
#Remove row index
df <- subset(df, select = -c(row))
Дайте мне знать, если у вас есть какие-либо вопросы.Кажется, он работает так, как задумано для нескольких точек данных, которые я тестировалЭто предполагает, что вы не хотите считать эту строку в ваших двух подсчетах, иначе все подсчеты col1 будут равны 1.
Редактировать
Код для просмотра только за два часа до инцидента, приведенного ниже (снова опирается на предоставленный код).
df$row <- as.numeric(rownames(df))
#Column 1: count occurrences +/- 2hrs within same city
df$col1 <- mapply(function(time, city, row) sum(df[df$row != row,"time"] <= time & df[df$row != row,"two.After"] >= time & df[df$row != row,"loc"] == city),
df$time, df$loc, df$row)
#Column2: count occurrences +/- 2hrs within same city and on a bus
df$col2 <- mapply(function(time, city, bus, row) sum(df[df$row != row,"time"] <= time & df[df$row != row,"two.After"] >= time & df[df$row != row,"loc"] == city & df[df$row != row,"type"] == "Bus"),
df$time, df$loc, df$type, df$row)