我有一个数据集,其中包含用户列表和相应的文章,如:
A_ID<-c(111,116,111,112,112,114,116,113,114,111,114,116,115,116)
U_ID<-c(221,221,222,222,223,223,223,224,224,225,225,225,226,226)
df_u_a<-data.frame(U_ID,A_ID)
我想构建一个矩阵,向我展示每个用户有多少次出现,如
如果我有重复项,我希望获得相同的输出,例如,以下内容应计入用户226访问过文章116,而不是像用户226访问过文章116两次:
A_ID<-c(116,116)
U_ID<-c(226,226)
df_u_a<-data.frame(U_ID,A_ID)
我尝试了函数矩阵,但似乎我只是得到一个表:
m<-as.matrix(df_u_a)
m
也许我mont正确使用矩阵函数或者我应该使用另一个函数。你可以请一些人建议如何在R中获得矩阵,如上图所示。
答案 0 :(得分:3)
使用table
后,您只需转换为logical
,即:
myTab <- table(df_u_a)
myTab[] <- as.integer(as.logical(myTab))
答案 1 :(得分:0)
以下是使用reshape2::dcast
的单行解决方案:
library(reshape2);
dcast(df_u_a, U_ID ~ A_ID, length);
# U_ID 111 112 113 114 115 116
#1 221 1 0 0 0 0 1
#2 222 1 1 0 0 0 0
#3 223 0 1 0 1 0 1
#4 224 0 0 1 1 0 0
#5 225 1 0 0 1 0 1
#6 226 0 0 0 0 1 1