如何计算一个人访问的国家的顺序?

时间:2017-05-24 06:38:57

标签: r vector dataframe

我有一个如下所示的数据框:

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

这显示了每个人如何前往哪个国家。从此我需要有类似的东西

    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

我可以制作df [-1],它给出了没有top的整个矢量然后cbind它然后如何在每个id的最后一个条目中制作NA?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

我们可以通过获取第二列的lead来执行此操作,按“id”

分组
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>

答案 1 :(得分: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