Расширение, чтобы сделать данные большого размера широкими, не сворачивая строки в столбцы

#r #tidyr

#r #tidyr

Вопрос:

Я пытаюсь расширить большой набор данных, объединив несколько столбцов в идентификатор.

Я использовал spread, но в настоящее время я просто получаю столбец, который создает spread, но количество строк остается таким же, как и раньше. В настоящее время у меня есть:

   ID Code_Type Code
   1   10        4
   1    9        5 
   2    10       6
   2    9        7

  

Я хотел бы:

 ID  Code_Type_10  Code_type_9
1       4              5
2       6              7
  

Вот мой текущий код

 t <- spread(df, Code_Type, Code)
  

Однако, когда я делаю это, он создает столбцы, но не сжимает строки.

Комментарии:

1. Не уверен, что вы подразумеваете под «он создает столбцы, но не сжимает строки». Я получаю то, что кажется вашим результатом после добавления sep = "_" к spread вызову

2. Итак, что происходит, так это то, что я получаю два столбца в конце фрейма данных, которые являются столбцами Code_type, но данные по-прежнему высокие

3. вы должны убедиться, что ваши данные правильно представлены в этом примере. spread(df, Code_Type, Code, sep = "_") выводится точно для меня, но это может быть связано с наличием большего количества столбцов

Ответ №1:

Добавляю немного к записи MDEWITT

 df <- data.frame("ID" = c(1,1,2,2), 
                 "Code_Type" = c(10,9,10,9), 
                 "Code" = c(4,5,6,7))

t <- tidyr::spread(df, Code_Type, Code)
names(t)[c(2,3)] <- paste0(rep("Code_Type_", 2), names(t)[c(2,3)])

df %>% 
  mutate(Code_Type = paste0("Code_Type_", Code_Type)) %>% 
  spread(Code_Type, Code)

> t
  ID Code_Type_9 Code_Type_10
1  1           5            4
2  2           7            6
  

Ответ №2:

Это то, о чем вы думаете?

 df %>% 
  mutate(Code_Type = paste0("Code_Type_", Code_Type)) %>% 
  spread(Code_Type, Code)
  

Я думаю, вам просто нужно добавить шаг изменения, чтобы заставить его работать.