Хотя есть много вопросов по удалению строк, я не смог найти решение для своей проблемы.Удаление строк на основе результата значения в соответствующей строке и другого значения столбца в предыдущей строке
Вот data.frame в качестве примера:
df <- data.frame(A = c(1,2,3,4,5,6),
D1 = as.Date(as.character(c("1863-12-01","1945-06-06","1955-03-01","1962-08-01","1980-08-01","1998-12-01")), format = "%Y-%m-%d"),
D2 = as.Date(as.character(c("1923-02-28","1953-05-28","1962-07-31","1978-06-30","1998-11-30","2015-12-31")), format = "%Y-%m-%d"))
Результат должен быть без строк, где в большей степени, чем один день между датой ряда D1 и предыдущей строке D2, см это:
A D1 D2
5 1980-08-01 1998-11-30
6 1998-12-01 2015-12-31
Я попробовал его петлей, но он не работает нужным образом - я должен повторить цикл снова и снова для конечного результата:
for (i in 1:length(df))
{
if ((df$D1[i + 1] - df$D2[i]) > 1)
df <- df[-c(i), ]
}
Где ошибка, и есть ли лучший способ, чем цикл? Спасибо!
После использования кода на нескольких данных .frames Я узнал, что код удаляет каждую первую строку сравнения, которая обычно должна оставаться. Используйте этот набор данных ниже, и вы поймете, что я имею в виду. Отфильтрованный фрейм данных должен начинаться с «1955-03-01». df <- data.frame (A = c (1,2,3,4,5,6), D1 = as.Date (as.character (c («1863-12-01», «1945-06- 06 »,« 1955-03-01 »,« 1962-08-01 »,« 1980-08-01 »,« 1998-12-01 »)), формат =«% Y-% m-% d ») , D2 = as.Date (as.character (c («1923-02-28», «1953-05-28», «1962-07-31», «1980-07-31», «1998-11 -30 "," 2015-12-31 ")), format ="% Y-% m-% d ")) – Simon1723
Я не понимаю, с чего начать с 199-03-01? Разница до 1953-05-28 больше двух дней. – adibender
@ Simon1723 Кроме того, первая запись в 'D1' всегда будет неактуальной, так как нет« предыдущей »записи' D2' – adibender