在 R 中重塑不同时间长度的数据
Reshaping data of different time lengths in R
我想对我的数据进行多次重复测量。我首先需要将数据框从宽格式重塑为长格式才能做到这一点。
这是我的数据框:
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
....
但我什至不确定拥有这些空单元格是否有意义?
这是一个想法。 dt_all
是最终输出。请注意,此示例不会创建 Timex
、Timey
和 Timez
,但我认为一个名为 Time
的列就足够了,并且是单独的 Timex
、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)
数据准备
# Create example data frames
dt <- read.table(text = "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",
header = TRUE)
我想对我的数据进行多次重复测量。我首先需要将数据框从宽格式重塑为长格式才能做到这一点。
这是我的数据框:
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
....
但我什至不确定拥有这些空单元格是否有意义?
这是一个想法。 dt_all
是最终输出。请注意,此示例不会创建 Timex
、Timey
和 Timez
,但我认为一个名为 Time
的列就足够了,并且是单独的 Timex
、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)
数据准备
# Create example data frames
dt <- read.table(text = "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",
header = TRUE)