Измените формат данных, поместите категориальный в новый столбец для каждой уникальной категории, используя R - PullRequest
0 голосов
/ 28 сентября 2018

Предположим, у меня есть следующий фрейм данных

 test <- data.frame(items = c("itemA", "itemB","itemC", "itemD"),
          ID = c("1","2","1","3"),
          time = c("11","12","11","13"))

> test
     items ID time
   1 itemA  1   11
   2 itemB  2   12
   3 itemC  1   11
   4 itemD  3   13

Я пытаюсь изменить его так, чтобы он разрушался по ID.Для каждого уникального элемента должен быть создан столбец, и соответствующий элемент должен помещаться в каждый столбец таким образом, чтобы в любом столбце из 1 элемента был только 1 элемент.т.е. itemA не должен находиться в том же столбце, что и itemB.

Вот пример того, что я ищу:

> test
     ID time Item1   Item2   Item3    Item4
   1 1   11   itemA    -      itemC    -
   2 2   12    -      itemB    -       -
   4 3   13    -        -      -      itemD  

Любая помощь оценена!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

data.table обычно быстрее ... если вы можете жить с немного разными именами столбцов, попробуйте

library( data.table )
dcast( setDT( test ), ID + time ~ items, value.var = "items" )

#    ID time itemA itemB itemC itemD
# 1:  1   11 itemA  <NA> itemC  <NA>
# 2:  2   12  <NA> itemB  <NA>  <NA>
# 3:  3   13  <NA>  <NA>  <NA> itemD
0 голосов
/ 28 сентября 2018

Мы можем использовать tidyverse для создания столбца последовательности, а затем spread в «широком» формате

library(tidyverse)
test %>%      
   mutate(rn = paste0("Item", row_number())) %>% 
   spread(rn, items)
# ID time Item1 Item2 Item3 Item4
#1  1   11 itemA  <NA> itemC  <NA>
#2  2   12  <NA> itemB  <NA>  <NA>
#3  3   13  <NA>  <NA>  <NA> itemD
...