2016-10-08 1 views
1

첫 번째 행과 n 행 사이의 차이/지속 시간을 계산하려고합니다. 그 값을 새로운 기간 "duration"에 넣고 싶습니다. 샘플 데이터 : 아래. 내가 dplyr's group_by and mutate첫 번째 행과 n 행 사이의 열 값이 일치하는 값을 계산하십시오.

y <- y %>% group_by(Country) %>% mutate(duration = Year - lag(Year)) 

를 사용하려고했습니다

1992 USA 0 
1993 USA 1 
1994 USA 2 
1989 France 0 
1990 France 1 
1999 Mexico 0 
2000 Mexico 1 
2001 Mexico 2 

하지만 난 단지 실제 지연 년 (예 : 1999)를 얻거나에서만 차이를 계산할 수 있습니다

y <- data.frame(c("USA", "USA", "USA", "France", "France", "Mexico", "Mexico", "Mexico"), c(1992, 1993, 1994, 1989, 1990, 1999, 2000, 2001)) 
colnames(y) <- c("Country", "Year") 
y$Year <- as.integer(y$Year) # this is to match the class of my actual data 

내 원하는 결과입니다 순차적 인 행 사이에 나라의 첫 번째 행에 대해 NA 또는 동일한 국가에있는 다른 모든 행에 대해 하나를 가져옵니다. Manyq & a's은 첫 번째와 n 행 사이가 아니라 difference between sequential rows에 중점을 둡니다.

생각?

+0

y %>% group_by(Country) %>% mutate(duration = Year - first(Year)) 
는 차이'Y %> % GROUP_BY (나라) %> % 인 경우 mutate (기간 = Year - first (Year))' – akrun

+0

고마워요, @akrun! 이것은 위대합니다. 나는 R에 새로운 사람이고, 그것을 이해하려고 노력하는 데 몇 시간을 보냈지 만 잘못된 용어/프로세스를 찾고 있었음에 틀림 없다. 다시 한 번 감사드립니다! – user6780841

답변

0

'국가'별로 그룹화 한 후 '연도'열을 사용하여 '연도'를 first에서 뺄 수 있습니다.

당신은 (Y, AVE (seq_along (년), 국가, FUN = seq_along) -1)`또는 함께`이 작업을 수행 할 수 있습니다
관련 문제