Объединить значения разных строк в таблице в г

Мне нужно переформатировать таблицу в R.

У меня есть такой стол.

ID  category   
1   a   
1   b   
2   c   
3   d   
4   a   
4   c  
5   a   

И я хочу реформировать это как

ID  category1   category2  
1           a           b  
2           c        null  
3           d        null  
4           a           c  
5           a        null  

Это выполнимо в R?

2 ответа

Решение

Это очень простая проблема изменения типа "длинный в широкий", но вам нужна вторичная переменная "id" (или "time").

Вы можете попробовать использовать getanID из моего пакета "splitstackshape" и использования dcast изменить от длинного до широкого. getanID создаст новый столбец с именем.id, который будет использоваться как переменная времени:

library(splitstackshape)
dcast.data.table(getanID(mydf, "ID"), ID ~ .id, value.var = "category")
#    ID 1  2
# 1:  1 a  b
# 2:  2 c NA
# 3:  3 d NA
# 4:  4 a  c
# 5:  5 a NA

То же, что и у Ананды, но с использованием dplyr а также tidyr:

library(tidyr)
library(dplyr)
mydf %>% group_by(ID) %>%
    mutate(cat_row = paste0("category", 1:n())) %>%
    spread(key = cat_row, value = category)

# Source: local data frame [5 x 3]
# 
#   ID category1  category2
# 1  1         a          b
# 2  2         c         NA
# 3  3         d         NA
# 4  4         a          c
# 5  5         a         NA
Другие вопросы по тегам