다음과 같은 데이터 프레임이 있습니다.
이름 날짜
데이비드 2019-12-23
데이비드 2020-1-10
데이비드 2020-2-13
케빈 2019-2-12
케빈 2019-3-19
케빈 2019-5-1
케빈 2019-7-23
기본적으로 각 사람에 따라 각 인스턴스 간의 날짜 차이를 계산하려고합니다. 현재 다음 for 루프를 사용하고 있습니다.
df$daysbetween <- with(df, ave(as.numeric(date) , name,
FUN=function(x) { z=c(NA,NA);
for( i in seq_along(x)[-(1:2)] ){
z <- c(z, (x[i]-x[i-1]))}
return(z) }) )
현재는 두 번째와 세 번째의 차이를 계산하고 다음 인스턴스는 완벽하게 계산합니다. 그러나 첫 번째와 두 번째 날짜의 차이를 계산하지 않으므로 필요합니다. 내 코드의 오류는 어디에서 발생합니까? 도움을 주시면 감사하겠습니다.
패키지 lag
에서 사용 하십시오 dplyr
.
설명 : 벡터 에서 "이전"(lag ()) 또는 "다음"(lead ()) 값을 찾습니다. 현재 값의 뒤 또는 앞의 값을 비교하는 데 유용합니다.
df %>%
group_by(name) %>%
mutate(diff = date - lag(date))
산출:
name date diff
<chr> <date> <drtn>
1 David 2019-12-23 NA days
2 David 2020-01-10 18 days
3 David 2020-02-13 34 days
4 Kevin 2019-02-12 NA days
5 Kevin 2019-03-19 35 days
6 Kevin 2019-05-01 43 days
7 Kevin 2019-07-23 83 days
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다