2017-08-28 18 views
0

yearのために、私は以来、年の数を計算したい、のは今パネルデータに変数の値に基づいて、時間的な距離を探す

set.seed(28100) 

years <- 1900:2010 
conflict_lev <- sample(0:4, 111, replace = T, prob = c(0.9, 0.05, 0.03, 0.02, 0.01)) 

my_df <- data.frame(years, conflict_lev) 

その年に紛争の年とレベルのためにこれらの2つの変数を定義してみましょう前回conflict_levが0以上。これは、このループを見つけることができました。それにも関わらず

my_df$dist_last_conflict <- NA 

for (i in 1:length(years)) { 
    my_df$dist_last_conflict[i] <- min(years[i] - years[years < years[i] & conflict_lev > 0]) 
} 

、私はdplyrdist_last_conflictを作成するために苦労していると私は、複数のグループがある場合、変数0123で定義されています。あなたが他のアプローチに開いている場合は、各期間の指標を作成することができます

library(dplyr) 

my_df %>% 
group_by(group) %>% 
mutate(dist_last_conflict = findDistLastConflict(conflict_lev, years)) 

答えて

0

理想的には、私はループ上記とせずに同じ結果を得る機能findDistLastConflict()を定義することができるはずです各期間にseq(1, n())を使用してください:

my_df %>% 
    mutate(peaceful.period = cumsum(conflict_lev!=0)) %>% 
    group_by(peaceful.period) %>% 
    mutate(dist_last_conflict = seq(1, n())-1) %>% 
    ungroup() %>% 
    select(-peaceful.period) 

# A tibble: 111 x 3 
    years conflict_lev dist_last_conflict 
    <int>  <int>    <dbl> 
1 1900   0     0 
2 1901   0     1 
3 1902   0     2 
4 1903   0     3 
5 1904   0     4 
6 1905   0     5 
7 1906   0     6 
8 1907   0     7 
9 1908   0     8 
10 1909   0     9 
# ... with 101 more rows 
関連する問題