Изменение формы данных разной продолжительности в 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
....

Но я даже не уверен, есть ли вообще смысл иметь эти пустые ячейки?


person Inkling    schedule 14.06.2017    source источник
comment
Можете ли вы показать ожидаемый результат?   -  person akrun    schedule 14.06.2017
comment
я с akrun на этом. чего вы хотите достичь?   -  person tagoma    schedule 14.06.2017
comment
Я добавил свое ожидание. Я не включил это в первую очередь, потому что я даже не уверен, возможно ли это или имеет ли это вообще смысл!   -  person Inkling    schedule 14.06.2017
comment
@Inkling После того, как я опубликовал свой ответ, я только что заметил, что вы задавали аналогичный вопрос раньше (stackoverflow.com/questions/43850034/), и эти вопросы были отмечены как дубликат. Есть ли причина, по которой вы снова опубликовали аналогичный вопрос, особенно это дубликат?   -  person www    schedule 14.06.2017
comment
Спасибо за Ваш ответ! Для меня это два отдельных вопроса, мой другой вопрос был о том, как использовать функцию изменения формы для нескольких переменных одновременно (чего я не заметил до того, как это было дублирование, я мог бы удалить свой вопрос, если это обычная практика?). Мой вопрос здесь был конкретно о том, имеют ли переменные разную длину. (Я использовал аналогичный набор данных в качестве иллюстрации, но обратите внимание, что в этом примере я не учел z3). После того, как на мой первый вопрос был дан ответ, я застрял с этой проблемой, так что для меня это было продолжением.   -  person Inkling    schedule 14.06.2017
comment
Спасибо за ваше объяснение. Если нет других проблем, я чувствую, что вам не нужно удалять свой последний вопрос. Были и другие, которые дали хорошие ответы на ваш вопрос. Если вы удалите это, все связанные ответы исчезнут.   -  person www    schedule 14.06.2017


Ответы (1)


Вот одна идея. 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)
person www    schedule 14.06.2017