Объединить значения разных строк в таблице в г
Мне нужно переформатировать таблицу в 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