tidyr::собирать наблюдения из нескольких наборов столбцов разных типов

Как я могу преобразовать набор данных в «широком» формате, который имеет наборы столбцов разных типов, в «длинный» формат, как в примере ниже? Предпочтительно использовать tidyr (и dplyr и т. д.) или какой-нибудь столь же простой синтаксис.

d_wide <- data.frame(
             pair_id=1:3,
             name_wife=c('Ana','Maria','Kely'),blood_type_wife=c('A','B','C'), age_wife=c(34,21,55),
             name_husb=c('Bob','Peter','John'),blood_type_husb=c('B','O','A'), age_husb=c(31,24,60)
          )

d_long <- data.frame(
             pair_id=c(1,1,2,2,3,3),
             role=c('wife','husb','wife','husb','wife','husb'),
             name=c('Ana','Bob','Maria','Peter','Kely','John'),
             blood=c('A','B','B','O','C','A'), 
             age=c(34,31,21,24,55,60)
          ) 

OBS: другие связанные вопросы SO, такие как this, включают наборы столбцы одного типа, все числовые. Затем ответ в них включает сбор (плавление) данных в «сверхдлинный» формат и распространение обратно в желаемый длинный формат. Здесь это не сработает, поскольку переменные имеют разные типы, поэтому они не могут быть представлены одним и тем же столбцом «значение» в сверхдлинном формате.


person LucasMation    schedule 21.03.2016    source источник
comment
Короткий ответ из связанного обмана заключается в том, что вам будет лучше с melt из data.table, а не с melt из reshape2.   -  person A5C1D2H2I1M1N2O1R2T1    schedule 21.03.2016
comment
Кроме того, я предполагаю, что name_wife=c('Bob','Peter','John') должно было быть name_husb(...).   -  person A5C1D2H2I1M1N2O1R2T1    schedule 21.03.2016
comment
Спасибо большое! Я только что исправил ошибку name_husb. О, является ли это дубликатом: хотя я согласен, что ответ будет таким же, другой вопрос сформулирован с упором на имена переменных (если их суффикс числовой или символьный). Дело в разнице типов информации, которую содержат переменные. Таким образом, сохранение этого вопроса в качестве отдельного вопроса может быть полезным.   -  person LucasMation    schedule 21.03.2016
comment
Дубликаты — это просто указатели. Они не удаляют вопрос. Вопрос о преобразовании типов данных с использованием gather описан в этом ответе (на тот же вопрос) в первом списке.   -  person A5C1D2H2I1M1N2O1R2T1    schedule 21.03.2016