Изменить форму данных, содержащую номинальные данные, где значение становится префиксом столбца - PullRequest
1 голос
/ 10 января 2020

Приветствую коллег, я борюсь с основной проблемой c, но не могу решить мою проблему. У меня есть набор данных, который структурирован как:

Reference | Person | DOB       |Status      | Address
------------------------------------------------------
0001/xy   | 001    |19/01/1960 | Respondent |123 Fake Street
0001/xy   | 002    |01/06/1978 | Defendant  |555 High Ave.
0002/xy   | 001    |31/04/1988 | Respondent |432 Random Dr.
0002/xy   | 002    |14/07/1991 | Defendant  |666 Missing Close
0002/xy   | 003    |10/10/2010 | Defendant  |987 McFakerton Blvd.
0003/xy   | 001    |08/02/1995 | Respondent |911 Crime Street

Reference - это уникальный ключ для «инцидента». Мне нужен только один ряд данных широкого набора, в котором столбец должен поворачиваться равен Status, а новые столбцы содержат префикс из значений столбца. Таким образом, это должно выглядеть так:

Reference | Person | Respondent1_DOB | Respondent1_Address |Defendent1_DOB | Defendent1_Address |Defendent2_DOB | Defendent2_Address 
-------------------------------------------------------------------------------------------------------------------------------------
0001/xy   | 001    |19/01/1960       |123 Fake Street      |01/06/1978     |555 High Ave        |               |
0002/xy   | 001    |31/04/1988       |432 Random Dr.       |14/07/1991     |666 Missing Close   |10/10/2010     |987 McFakerton Blvd 
0003/xy   | 001    |08/02/1995       |911 Crime Street     |               |                    |               |

Как видите, это простая задача, но все функции преобразования, которые я пробовал, включая tidyr и Reshape2, продолжают пытаться суммировать данные, которые удаляются. номинальные характеристики, в дополнение к тому, чтобы не дублировать заголовки столбцов для предоставленных значений, или полностью потерпеть неудачу.

Мой пробный и неудачный код включен:

Trans<-transform(reshape(Original, direction='wide', 
                                varying=list(3,5))[-1], id=Status)

Trans<- dcast(Original, Reference ~ Status, 
               value.var = c("DOB","Address"))

Trans<- Original %>% pivot_wide(Reference ~ Status,names_preifx=Status )

Есть ли простой способ сделать это в R? Я мог бы сделать это в Python, но я стараюсь придерживаться одного языка и IDE, поскольку именно это сейчас имеет организация.

1 Ответ

2 голосов
/ 10 января 2020

Вы можете использовать базовую функцию r reshape:

reshape(df[-4],timevar = "Person",idvar = "Reference",direction = "wide")

  Reference    DOB.001      Address.001    DOB.002       Address.002    DOB.003          Address.003
1   0001/xy 19/01/1960  123 Fake Street 01/06/1978     555 High Ave.       <NA>                 <NA>
3   0002/xy 31/04/1988   432 Random Dr. 14/07/1991 666 Missing Close 10/10/2010 987 McFakerton Blvd.
6   0003/xy 08/02/1995 911 Crime Street       <NA>              <NA>       <NA>                 <NA>
...