将因子数据重塑为矩阵
reshaping factor data to matrix
重塑数据中的因子列的 correct/short 方法是什么:
login has_profile_in
1234 Facebook
1234 LinkedIn
1235 VK
变成这样的矩阵:
login Facebook LinkedIn VK
1234 1 1 0
1235 0 0 1
使用 tidyr 管道?
编辑: 我知道一些常规的方法,即使用 reshape2
dcast(login~has_profile_in)
而且还有其他方法。
我的问题是如何以整洁的方式进行,包括在基于通用管道的框架中的操作
按照 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
将是最快的,但有偏见的投票仍在进行或马甲 activity。
您可以使用
model.matrix(~yourFactor+0)
您可以使用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
重塑数据中的因子列的 correct/short 方法是什么:
login has_profile_in
1234 Facebook
1234 LinkedIn
1235 VK
变成这样的矩阵:
login Facebook LinkedIn VK
1234 1 1 0
1235 0 0 1
使用 tidyr 管道?
编辑: 我知道一些常规的方法,即使用 reshape2
dcast(login~has_profile_in)
而且还有其他方法。 我的问题是如何以整洁的方式进行,包括在基于通用管道的框架中的操作
按照 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
将是最快的,但有偏见的投票仍在进行或马甲 activity。
您可以使用
model.matrix(~yourFactor+0)
您可以使用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