2017-05-24 11 views
1

私は以下のようなデータフレームDFを持っている:人が訪れる国の順番を計算するには?

id  country_id 
__  _______ 
1   01 
1   02 
1   03 
2   01 
2   04 
2   05 
3   06 
3   08 
3   09 
3   10 

これは、一人一人が、私はDFの[を作ることができ、この

id  from  to 
    ___  _____ ____ 
    1   01  02 
    1   02  03 
    1   03  NA 
    2   01  04 
    2   04  05 
    2   05  06 
    3   06  NA 
    3   08  09 
    3   09  10 
    3   10  NA 

のようなものを持っている必要があり、これをcountry.From先の旅を示し - 1]トップを持たないベクトル全体を与えてからバインドしますが、各IDの最後のエントリでNAを作る方法は?どんな助けもありがとうございます。

答えて

3

私たちは、ここで 'ID' でグループ化された第二のカラムのlead

library(dplyr) 
df1 %>% 
    group_by(id) %>% 
    transmute(from = country_id, to= lead(from)) 
# A tibble: 10 x 3 
# Groups: id [3] 
#  id from to 
# <int> <chr> <chr> 
# 1  1 01 02 
# 2  1 02 03 
# 3  1 03 <NA> 
# 4  2 01 04 
# 5  2 04 05 
# 6  2 05 <NA> 
# 7  3 06 08 
# 8  3 08 09 
# 9  3 09 10 
#10  3 10 <NA> 
3

を取得することによってこれを行うことができますがdata.table

library("data.table") 
d <- read.table(header=TRUE, stringsAsFactors = FALSE, colClasses = c("integer", "character"), text= 
'id  country_id 
1   01 
1   02 
1   03 
2   01 
2   04 
2   05 
3   06 
3   08 
3   09 
3   10 ') 
setDT(d)[, to:=shift(country_id, type="lead"), by=id][] 
# id country_id to 
# 1: 1   01 02 
# 2: 1   02 03 
# 3: 1   03 NA 
# 4: 2   01 04 
# 5: 2   04 05 
# 6: 2   05 NA 
# 7: 3   06 08 
# 8: 3   08 09 
# 9: 3   09 10 
# 10: 3   10 NA 
とソリューションです。
関連する問題