使用R

时间:2019-02-06 18:38:09

标签: r dplyr tidyr

在示例面板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

有人知道我该怎么做吗?谢谢!

1 个答案:

答案 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