Вычислить продолжительность / разницу между первой и n строками, соответствующими значению столбца

Я пытаюсь вычислить разницу / продолжительность между первой и n строками фрейма данных, которые совпадают в одном столбце. Я хочу поместить это значение в новый столбец «Продолжительность». Примеры данных: ниже.

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

Мой желаемый результат:

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

Я пробовал использовать dplyr group_by и изменить

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

но я могу получить только фактический год задержки (например, 1999) или только вычислить разницу между последовательными строками, получив либо NA для первой строки страны, либо 1 для всех других строк с той же страной. Многие q & a's сосредоточены на разница между последовательными строками, а не между первой и n строк.

Мысли?


person user6780841    schedule 08.10.2016    source источник
comment
Вы можете сделать это with(y, ave(seq_along(Year), Country, FUN = seq_along)-1) или если это разница y %>% group_by(Country) %>% mutate(duration = Year - first(Year))   -  person akrun    schedule 08.10.2016
comment
Спасибо, @akrun! Отлично. Я новичок в R и потратил несколько часов, пытаясь понять это, но, должно быть, искал неправильные термины / процессы. Спасибо еще раз!   -  person user6780841    schedule 08.10.2016


Ответы (1)


Это можно сделать, вычтя first «Год» из столбца «Год» после группировки по «Странам».

y %>%
   group_by(Country) %>%
   mutate(duration = Year - first(Year))
person akrun    schedule 08.10.2016