Транспонировать / изменить форму кадра данных без «timevar» из длинного в широкий формат

У меня есть фрейм данных, который следует приведенному ниже длинному шаблону:

   Name          MedName
  Name1    atenolol 25mg
  Name1     aspirin 81mg
  Name1 sildenafil 100mg
  Name2    atenolol 50mg
  Name2   enalapril 20mg

И хотел бы получить ниже (Меня не волнует, могу ли я получить столбцы, которые будут названы таким образом, просто хочу, чтобы данные были в этом формате):

   Name   medication1    medication2      medication3
  Name1 atenolol 25mg   aspirin 81mg sildenafil 100mg
  Name2 atenolol 50mg enalapril 20mg             NA

Через этот самый сайт я познакомился с пакетом reshape/reshape2 и предпринял несколько попыток заставить его работать, но пока безуспешно.

Когда я пытаюсь dcast(dataframe, Name ~ MedName, value.var='MedName')я просто получаю кучу столбцов, которые являются флагами названий лекарств (значения, которые транспонируются, равны 1 или 0 )пример:

 Name  atenolol 25mg  aspirin 81mg
Name1              1             1
Name2              0             0 

Я также попробовал dcast(dataset, Name ~ variable)после того, как растопил набор данных, однако это просто выдает следующее (просто подсчитывает, сколько лекарств есть у каждого человека):

 Name  MedName
Name1        3
name2        2

Наконец, я попытался расплавить данные, а затем изменить форму, используяidvar="Name"timevar="variable"(из которых все просто Mednames ), однако это не кажется созданным для моей проблемы, поскольку, если есть несколько совпадений с idvar, изменение формы просто берет первое MedName и игнорирует остальные.

Кто-нибудь знает, как это сделать, используя изменение формы или другую функцию R? Я понимаю, что, вероятно, есть способ сделать это более запутанным образом с некоторыми циклами for и условными операторами, чтобы разделить и повторно -вставить данные,но я надеялся, что есть более простое решение. Большое спасибо!

18
задан Jaap 27 August 2017 в 08:57
поделиться