2016-06-20 2 views
-1

Что такое правильный/короткий путь, чтобы изменить столбец фактора в данном:данные фактора также пересмотр матричные

login has_profile_in 
1234 Facebook 
1234 LinkedIn 
1235 VK 

в матрицу, как это:

login Facebook LinkedIn VK 
1234  1  1  0 
1235  0  0  1 

использование tidyr трубопровода?

Edit: Я знаю, что некоторые регулярные способы сделать это, то есть с reshape2

dcast(login~has_profile_in) 

и что существуют и другие способы, как хорошо. Мой вопрос заключается в том, чтобы сделать это в tidyr способом, в том числе операции в общих рамках трубопровода на основе

+1

Обновлены методом tidyr – akrun

ответ

1

В ОП запрошенной tidyr метод

library(dplyr) 
library(tidyr) 
df1 %>% 
    mutate(Count = 1) %>% 
    spread(has_profile_in, Count, fill = 0) 
# login Facebook LinkedIn VK 
#1 1234  1  1 0 
#2 1235  0  0 1 

Самый короткий вариант будет table

as.data.frame.matrix(+(table(df1)!=0)) 
#  Facebook LinkedIn VK 
#1234  1  1 0 
#1235  0  0 1 

Или с помощью data.table

library(data.table) 
dcast(setDT(df1), login~has_profile_in, function(x) +(length(x)!=0)) 
# login Facebook LinkedIn VK 
#1: 1234  1  1 0 
#2: 1235  0  0 1 

Примечание: dcast будет самым быстрым, но предвзято голосование еще продолжается или sockpuppet деятельность.

1

Вы можете использовать

model.matrix(~yourFactor+0) 
3

Вы можете использовать aggregate

aggregate(has_profile_in ~ login, df, table) 


# login has_profile_in.Facebook has_profile_in.LinkedIn has_profile_in.VK 
#1 1234      1      1     0 
#2 1235      0      0     1 

Вы можете переименовать столбцы с помощью setNames и сделать его более удобным для чтения

setNames(aggregate(has_profile_in ~ login, df, table), c("Login", "")) 

# Login .Facebook .LinkedIn .VK 
#1 1234   1   1 0 
#2 1235   0   0 1 
Смежные вопросы