重塑R

时间:2017-06-14 10:30:38

标签: r dataframe reshape

我想对我的数据执行多次重复测量。我首先需要将数据帧从宽格式重新整形为长格式。

这是我的数据框:

    ID Group x1  x2  x3  y1  y2  y3  z1  z2
    144 1   566 613 597 563 549 562 599  469
    167 2   697 638 756 682 695 693 718  439.5
    247 4   643 698 730 669 656 669 698  514.5
    317 4   633 646 641 520 543 586 559  405.5
    344 3   651 678 708 589 608 615 667  514
    352 2   578 702 671 536 594 579 591  467.5
    382 1   678 690 693 555 565 534 521  457.5
    447 3   668 672 718 663 689 751 784  506.5
    464 2   760 704 763 514 554 520 564  486
    628 1   762 789 783 618 610 645 625  536

正如您可能注意到的,我在三个时间点测量变量x和y,在两个点测量变量z。考虑到我有不同的时间长度,我想知道尝试将数据重新整形为长格式是否有意义。

我无法这样做。首先,这样做是否有意义?或者我应该制作两个数据帧?第二,如果它确实有意义,怎么样?

编辑:我希望有类似的东西:

ID Group Timex  Timey Timez  x    y    z
144 1     1       1     1   566  563  599
144 1     2       2     2   613  549  469
144 1     3       3         597  562
167 2     1       1     1   697  682  718
167 2     2       2     2   638  695  439.5 
167 2     3       3         756  693
....

但是我甚至不确定这些是否有意义,有这些空单元格?

1 个答案:

答案 0 :(得分:0)

这是一个想法。 dt_all是最终输出。请注意,此示例不会创建TimexTimeyTimez,但我认为一个名为Time的列已足够且单个Timex,{ {1}},而Timey是多余的。

Timez

数据准备

# Load packages
library(dplyr)
library(tidyr)

# Process the data
dt_all <- dt %>%
  gather(Var, Value, -ID, -Group) %>%
  mutate(Time = sub("[a-z]", "", Var), Type = sub("[0-9]", "", Var)) %>%
  select(-Var) %>%
  spread(Type, Value)