2016-10-08 6 views
1

1つの列に一致するデータフレームの最初の行とnの行の差/継続時間を計算しようとしています。その値を新しい列「duration」に配置したい。サンプルデータ:以下。列の値と一致する最初と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's group_by and mutate

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

を使用してみましたが、私は唯一の実際の遅れ年度(例えば1999)を取得したり、唯一の違いを計算することができます連続した行の間で、国の最初の行の場合はNA、同じ国の場合は1行になります。 Manyq & a'sdifference between sequential rowsに焦点を当て、最初とn行の間ではない。

思考?

+0

あなたは '(Y、AVE(seq_along(年)、国、FUN = seq_along)-1)'とか、%>%差異 'Y%>%GROUP_BY(国)であれば、これを行うことができますmutate(duration = Year - first(Year)) ' – akrun

+0

ありがとう、@akrun!これは素晴らしい。私はRに新しい人であり、それを理解しようと数時間を費やしましたが、間違った用語やプロセスを探していたに違いありません。再度、感謝します! – user6780841

答えて

0

これは、「国」でグループ化した後に「年」列の「年」をfirstから差し引くことによって行うことができます。

y %>% 
    group_by(Country) %>% 
    mutate(duration = Year - first(Year)) 
関連する問題