각 id
내에 적어도 91 일 간격으로 행을 보관하고 싶습니다. 내 데이터 프레임 df
에는 id=1
에 5 개의 행이 있고 id=2
에는 1 개의 행이 있습니다.R의 행 사이의 날짜 차이를 기준으로 행을 필터링하는 방법?
id=1
의 경우 1, 3 및 5 번째 행만 유지하고 싶습니다.
첫 번째 날짜와 두 번째 날짜를 비교하면 32 일 차이가 있기 때문입니다. 따라서 2 번째 날짜는 삭제하십시오. 첫 번째와 세 번째 날짜를 비교하기 위해 152 일 차이가납니다. 그래서 우리는 3 번째 데이트를 유지합니다.
이제 첫 번째 날짜를 참조로 사용하는 대신 세 번째 날짜를 사용합니다. 세 번째 날짜와 네 번째 날짜는 61 일 차이가납니다. 4 번째 날짜를 삭제하십시오. 우리는 3 번째 날짜와 5 번째 날짜를 비교하기 위해 진행하며 121 일 차이가납니다. 그래서, 우리는 5 번째 날짜를 유지합니다.
결국 우리가 유지하는 날짜는 1, 3 및 5 번째 날짜입니다. id=2
의 경우 행이 하나뿐이므로 저장해 두었습니다. 원하는 결과는 dfnew
에 표시됩니다.
df <- read.table(header = TRUE, text = "
id var1 date
1 A 2006-01-01
1 B 2006-02-02
1 C 2006-06-02
1 D 2006-08-02
1 E 2007-12-01
2 F 2007-04-20
",stringsAsFactors=FALSE)
dfnew <- read.table(header = TRUE, text = "
id var1 date
1 A 2006-01-01
1 C 2006-06-02
1 E 2007-12-01
2 F 2007-04-20
",stringsAsFactors=FALSE)
난 단지 다음과 같이 id
하여 df
를 그룹화 시작으로 생각할 수 있습니다 :
library(dplyr)
dfnew <- df %>% group_by(id)
는 그러나, 나는 여기에서 계속하는 방법을 모르겠습니다. filter
기능 또는 slice
으로 진행해야합니까? 그렇다면 어떻게?
은 아마'Date' 클래스로 변환 :
데이비드 Arenburg에 의해 제안, 그룹에 의해 처음으로 대신 Date 클래스에
date
를 변환하는 것이 좋습니다 –@DavidArenburg : 감사합니다. 귀하의 의견은 항상 높이 평가됩니다. 나는 편집을했다. – aichao