簡體   English   中英

R矩陣轉置錯誤“需要數字/復雜矩陣/矢量參數”

[英]R matrix transposing error “requires numeric/complex matrix/vector arguments”

我正在從事社交網絡分析任務,需要從矩陣創建網絡。 我正在嘗試創建一個矩陣,以顯示人們共有的類。

我的原始數據如下所示:

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")

我已經將原始數據整理到一個矩陣中,需要對其進行轉置,但是出現以下錯誤:

Error in M1 %*% t(M1) : requires numeric/complex matrix/vector arguments

到目前為止,這是我所做的:

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)

使用t()%*%時,先前的SO問題/答案R錯誤消息“需要數字/復雜矩陣/矢量參數”建議使用以下代碼,但我得到相同的錯誤消息。

df2 %>% mutate_if(is.factor, as.character) -> df2
m <- as.matrix(df2)
m2 <- t(m) %*% m 

任何有關我出錯的地方以及如何解決該錯誤以獲取正確的矩陣(顯示與班級聯系的學生)的建議都將受到贊賞。 謝謝!

因此,如果您需要一個矩陣來顯示具有共享類的個人,則可以使用igraph程序包,創建一個包含個人類的雙模式網絡,然后將其投影到共享參與者和(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")

我無視班級編號(我不確定班級編號在您的問題中扮演什么角色),而是關注班級代碼:

D2$number<-NULL

然后,從這個數據框中,我們可以創建兩種模式的類個體網絡:

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

simple命令刪除重復的聯系和循環。

然后,我們確定節點類型(類/個人):

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)從共享課程的個人網絡中提取矩陣: INDmat<-as_adjacency_matrix(INDnet) INDmat<-as.matrix(INDmat)

暫無
暫無

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

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