首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R矩阵转置错误“需要数字/复数矩阵/向量参数”

R矩阵转置错误“需要数字/复数矩阵/向量参数”
EN

Stack Overflow用户
提问于 2017-12-22 11:16:23
回答 1查看 520关注 0票数 0

我正在做一个社交网络分析任务,需要从矩阵中创建一个网络。我正在尝试创建一个矩阵来显示人们的共同点。

我的原始数据如下所示:

代码语言:javascript
复制
Last.Name <- c("A", "B", "C", "D")
email <- c("abdn@gmail.com", "anfgd@gmail.com", "ahdg@gmail.com", "resd@gmail.com)
Class.1 <- c("ABC101", "ABC364", "ABC103", "ABC354")
Class.2 <- c("ABC201", "ABC204", "ABC207", "ABC624")
Class.3 <- c("ABC223", "ABC267", "ABC103", "ABC354")

我已经将原始数据编排到一个矩阵中,需要对其进行转置,但得到以下错误:

代码语言:javascript
复制
Error in M1 %*% t(M1) : requires numeric/complex matrix/vector arguments

这就是我到目前为止所做的:

代码语言:javascript
复制
library(tidyr)
D1$classes <- 1
D2<- D1 %>% gather(Class.1:Class.6, key = "number", value = "class-names")
D3<- spread(D2, key= "class-names", value= "classes")
D3$email <- NULL 
M1 <- as.matrix(D3)
M1[is.na(M1)] <- 0
M2 <- t(M1)
M3 <- M1 %*% t(M1)

之前的SO问题/答案R error message when using t()%*% “requires numeric/complex matrix/vector arguments建议使用以下代码,但我得到了相同的错误信息。

代码语言:javascript
复制
df2 %>% mutate_if(is.factor, as.character) -> df2
m <- as.matrix(df2)
m2 <- t(m) %*% m 

任何关于我哪里出了错以及如何解决这个错误的建议,以获得显示学生通过课程联系的正确矩阵,都将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-01-23 01:36:17

因此,如果您需要一个矩阵来显示具有共享类的个人-您可以利用igraph包,创建一个个人-类的双模式网络,然后将其投影到(I)共享参与者的类和(ii)共享类的个人的两个单模式网络。

创建数据帧(我只是使用姓氏来标识个人)

library(tidyr) library(igraph)

DF<-cbind(Last.Name,Class.1,Class.2,Class.3)%>%as.data.frame(.,stringsAsFactors=FALSE) D2<- DF %>% gather(Class.1:Class.3, key = "number", value = "class-names")

我忽略了类号(我不确定类号在您的问题中扮演了什么角色),而是专注于类代码:

代码语言:javascript
复制
D2$number<-NULL

然后,从这个数据帧中,我们可以创建双模式的类-个体网络:

g<- graph_from_data_frame(D2, directed=FALSE) plot(g) g2<-simplify(g, remove.multiple = TRUE, remove.loops = TRUE)

simplify命令可删除重复的连接和回路。

然后我们确定节点类型(类/个体):

V(g2)$type<-V(g2)$name %in% unique(DF$Last.Name)

然后我们可以将这个双模网络投影到两个单模网络中:

PROJECTION<-bipartite.projection(g2) #two-mode CLASSnet<-PROJECTION[[1]] #one-mode INDnet<-PROJECTION[[2]]#one-mode

然后,我们可以使用以下命令从共享类的个人网络中提取矩阵:INDmat<-as_adjacency_matrix(INDnet) INDmat<-as.matrix(INDmat)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47935418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档