2015-07-08 3 views
-1

Я следующие данныеданные в R также пересмотр

mydata <- data.frame(id=c(1,1,1,2,2,3,3,3,3,4,5,5,5), age=c(20,20,20,25,25,19,19,19,19,30,22,22,22), category=c("a","b","c","a","d","a","b","c","d","a","d","b","c")) 

Я хочу, чтобы изменить его

ID Age a b c d 
1 20 1 1 1 0 
2 25 1 0 0 1 
3 19 1 1 1 1 
4 30 1 0 0 0 
5 22 0 1 1 1 

В основном нужно добавить количество двоичных столбцов = количество факторов в «категории '.

ответ

3

Вы можете попробовать dcast

library(reshape2) 
dcast(mydata, id+age~category, value.var='category', length) 
# id age a b c d 
#1 1 20 1 1 1 0 
#2 2 25 1 0 0 1 
#3 3 19 1 1 1 1 
#4 4 30 1 0 0 0 
#5 5 22 0 1 1 1 

Или с помощью dplyr/tidyr

library(dplyr) 
library(tidyr) 
mydata %>% 
     mutate(val=1) %>% 
     spread(category, val, fill=0) 

Или вариант, предложенный @Pierre Lafortune

do.call(data.frame,aggregate(category~id+age, mydata, table)) 
+1

Может ли эта работа тоже? 'aggregate (category ~ id + age, mydata, table)' Имена отключены, хотя –

+0

@PierreLafortune Похоже, что это тоже работает, но столбец 'category' является матрицей. Таким образом, может быть обертка с помощью 'do.call (data.frame, aggregate (category ~ id + age, mydata, table))' делает правильный data.frame – akrun

+1

@PierreLafortune Я добавил вашу версию в сообщение, поскольку это уже отмечено как дубликат – akrun

Смежные вопросы