从中间(对)格式化到矩阵

时间:2017-03-12 06:52:15

标签: r

我试图在R studio中绘制网络或连接。 我找到了一个有用的包,信息如下, http://stats.idre.ucla.edu/r/faq/how-can-i-manage-and-plot-social-network-data/

帖子以数据表开头。格式如下,

  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20
1  0  0  1  0  0  1  0  0  0   1   0   0   0   0   0   0   0   0   0   0
2  0  0  0  0  1  1  0  0  0   1   0   0   0   0   0   0   0   0   0   1
3  0  1  0  0  1  0  1  1  0   0   0   0   0   0   0   0   0   1   0   0

这是我的问题,我的数据以成对开头。

V1;V22 
V1;V24 
V2;V5  
V2;V6  
V2;V10 
V2;V20 
V2;V21 
V3;V2  
V3;V5  
V3;V7

有没有办法将它格式化为R中的数据表或矩阵,就像第一个一样? 方向信息无关紧要。

2 个答案:

答案 0 :(得分:1)

如果没有for循环,可能有一种方法可以做到这一点,但这应该可以完成工作。假设您可以忽略所有数字前面的“V”。

library(data.table)

#initilize sample data set
DT <- data.table(c(1,1,2,2,2,2,2,3,3,3), c(22,24,5,6,10,20,21,2,5,7))

#Create DT with correct number of rows
DT_1 <- data.table(1:max(DT$V1))

#Add in correct amount of columns
DT_1 <- DT_1[, paste0(1:max(DT)) := .SD][, 2:(max(DT)+1)]

#Set everything to 0
DT_1[,] <- 0

#loop through and add 1 for each reference in the pairs
for(i in 1:dim(DT)[1]){
  DT_1[DT$V1[i], DT$V2[i]] <- DT_1[[DT$V1[i], DT$V2[i]]] + 1
}

#Output
DT_1

答案 1 :(得分:0)

我找到了一个与此问题相关的帖子,目的相同。 https://lists.nongnu.org/archive/html/igraph-help/2008-09/msg00007.html

它显示非数字顶点可以直接读取并通过igraph R包绘制。

g <- read.graph("temp.txt", format="ncol")
plot.igraph(g)

文件temp.txt

V1 V22
V1 V24
V2 V5
V2 V6
V2 V10
V2 V20
V2 V21
V3 V2
V3 V5
V3 V7