簡體   English   中英

將因子數據重塑為矩陣

[英]reshaping factor data to matrix

在數據中重塑因子列的正確/簡短方法是什么:

login has_profile_in
1234  Facebook
1234  LinkedIn
1235  VK

變成這樣的矩陣:

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

使用提迪爾管道?

編輯:我知道一些常規的方法,例如reshape2

dcast(login~has_profile_in)

還有其他方法。 我的問題是如何以整齊的方式做到這一點,包括在基於通用管道的框架中進行操作

您可以使用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

如OP所要求的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可能是最快的,但投票仍在進行中,或者活動仍在進行中。

您可以使用

model.matrix(~yourFactor+0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM