преобразовать широкоформатную панель data.frame в длинный переходный формат из-в (источник-назначение) в R - PullRequest
0 голосов
/ 06 февраля 2019

В примере панели data.frame в R

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 голосов
/ 06 февраля 2019

Это можно почистить, но, надеюсь, вы получите суть этого:

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
...