在示例面板R中的data.frame
D<- data.frame(id=c(1:4),step1=c(1,1,1,1),step2=c(2,3,10,2), step3=c(3,2,NA,3),step4=c(4,10,NA,NA))
看起来像
id step1 step2 step3 step4
1 1 2 3 4
2 1 3 2 10
3 1 10 NA NA
4 1 2 3 NA
每个人都经过4个有序的步骤,值是节点的名称。 NA表示此人失踪了,对我而言很好。 我想将此data.frame转换为长格式,并显示过渡信息,其中包含三列:从,到,步进(顺序),如下所示:
id from to step
1 1 1 2 1
2 1 2 3 2
3 1 3 4 3
4 2 1 3 1
5 2 3 2 2
6 2 2 10 3
7 3 1 10 1
8 3 10 NA 2
9 3 NA NA 3
10 4 1 2 1
11 4 2 3 2
12 4 3 NA 3
有人知道我该怎么做吗?谢谢!
答案 0 :(得分:2)
这可以清理,但希望您能明白要点:
D %>%
gather("key", "value", -id) %>%
arrange(id, key) %>%
group_by(id) %>%
mutate(
from = value,
to = lead(value, 1)
) %>%
slice(1:(n() - 1)) %>% # remove the last record from each group (id)
rename(step = value) %>%
select(id, from, to, step, key)
# id from to step key
# <int> <dbl> <dbl> <dbl> <chr>
# 1 1 1 2 1 step1
# 2 1 2 3 2 step2
# 3 1 3 4 3 step3
# 4 2 1 3 1 step1
# 5 2 3 2 3 step2
# 6 2 2 10 2 step3
# 7 3 1 10 1 step1
# 8 3 10 NA 10 step2
# 9 3 NA NA NA step3
# 10 4 1 2 1 step1
# 11 4 2 3 2 step2
# 12 4 3 NA 3 step3