我有一个如下所示的数据框:
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?任何帮助表示赞赏。
答案 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