Как правильно перейти от широкого к длинному формату с разными / одинаковыми переменными - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь преобразовать свой фрейм данных из широкого формата в длинный. Я видел много вопросов, уже опубликованных здесь по этому поводу, но это не совсем то, что я ищу / я не понимаю, как применить это к моей проблеме.
Фреймы данных совместно используют некоторые столбцы, такие как Name, SharedVal и т. Д., Но также имеют столбцы, которых нет в другом наборе данных.
Чего я хочу добиться: Объедините эти два кадра данных на основе идентификатора пользователя, но для каждого идентификатора пользователя должно быть столько строк, сколько имеется MeasureNo.
Таким образом, если для пользователя было выполнено два измерения, будет две строки с одинаковым идентификатором пользователя. И строки имеют одинаковую длину, но в некоторых столбцах разные записи / вообще нет записей.

Пример:

Набор данных1:

UserID Name MeasureNo SharedVal1 SpecificVal1
     1 Anna         1         42            8
     2 Alex         1         28           50

и

Набор данных2:

UserID Name MeasureNo SharedVal1 DifferentVal1
     1 Anna         2         15            99
     2 Alex         2         33            45

И они должны быть объединены в:

UserID Name MeasureNo SharedVal1 SpecificVal1 DifferentVal1
     1 Anna         1         42            8             -
     1 Anna         2         15            -            99
     2 Alex         1         28           50             -
     2 Alex         2         33            -            45

и так далее ...

Проблема в том, что набор данных огромен, и в нем много строк и столбцов, поэтому я подумал, что каким-то образом объединить их с идентификатором, а затем изменить форму, является наиболее общим подходом. Но я не смог добиться ожидаемого поведения.

То, что я пытаюсь сказать программно, это: "Объедините два фрейма данных на основе идентификатора пользователя и создайте столько строк на каждый идентификатор использования, сколько существует разное время измерения (MeasureNo). Обе строки, очевидно, имеют одинаковое количество столбцов. Поэтому в обеих строках некоторые значения в определенных столбцах не могут быть заполнены.

Извините, я новичок в SO, и это был мой лучший подход к визуализации таблицы, строки которой начинаются с новой строки, а ключ: Val представляет столбец внутри этой строки.

1 Ответ

0 голосов
/ 10 января 2019

Вы можете сделать внешнее соединение:

new_df <- merge(df1, df2, all = T)
...