如何从R中的多个数据帧执行共现矩阵

时间:2017-06-21 15:43:55

标签: r matrix dataframe

我的第一语言不是英语,所以我提前为我能做的错误道歉。我是R的新手,但无论如何你都会注意到。

我试图解决共同出现矩阵的问题。我有几个数据帧,我对3个变量感兴趣:idT,numname和numstim。 这是包含合并数据的唯一数据框:

z=rbind(df1,df2,df3,df4,df5,df6,df7,df8,df9,df10,df11,df12,df13,df14,
 df15,df16,df17,df18,df19,df20,df21,df22,df23,df24,df25,df26,df27,df28,df29,df30,df31,df32)
write.csv(z, file = ".../listz.csv")

然后我用:

提取了3个变量
#Extract columns 3 & 6 from all the files within the list
z1 = z[,c(3,6)]

#Create a new variable 'numname' to convert name groups into numeric groups, 
#then obtain levels with facNum
z1$numname <- as.numeric(z1$namegroup)
colnames(z1) <- c("namegroup", "idT", "numname")
facNum <- factor(z1$numname)
write.csv(z1, file = "...D:/z1.csv")

数据看起来像:

           namegroup   idT   numname
1    GLISSEVIBREVITE   1       6
2          CINETIQUE   1       3
3 VIBRATIONS_LEGERES   1      20
4             DIFFUS   1       5
5            LIQUIDE   1       8
6        PICOTEMENTS   1      10

如何阅读表:每个idT被分类在一个组(名称组)中,然后该组被转换为数字变量(numname)。

# Specify z1 as a data frame to make next operations
z1 = as.data.frame(z1, idT = z1$numstim, numgroup = z1$numname)
tab1 <- table(z1)
write.csv(tab1, file = ".../tab1test.csv")
out1 <- data.matrix(tab1 %*% t(tab1))
write.csv(out1, file = ".../bmtest.csv")

但是bmtest矩阵看起来不像计算idT对,因为只有22个用户参与过,有32个idT,但有些数字要高得多:

    1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  
1   24  10  7   7   11  7   7   8   10  8   11  8   6   11  11  12  
2   10  32  27  7   5   4   7   4   4   4   5   3   2   6   6   14  
3   7   27  40  0   3   1   0   2   0   0   2   2   1   2   0   15  
4   7   7   0   30  7   14  15  9   15  13  13  7   5   12  13  5   
5   11  5   3   7   24  7   9   20  12  13  10  19  14  20  12  7   

我想要一个矩阵,显示配对的idT计数结果。矩阵必须看起来像:

    1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  
1   15  3   2   2   3   3   2   1   2   1   3   3   1   3   3   5   
2   3   15  9   2   0   1   2   0   0   0   0   0   0   0   1   3   
3   2   9   15  0   2   1   0   2   0   0   1   1   1   2   0   2   
4   2   2   0   15  1   6   5   1   7   5   6   2   0   1   3   2   
5   3   0   2   1   15  1   2   12  4   5   3   13  9   11  3   2   

换句话说,我想看看哪个idT已配对。我看过this topic,但没有找到解决问题的方法。

另外,我试过了:

library(igraph)
library(tnet)
idT_numname <- cbind(z1$idT, z1$numname)
igraph <- graph.data.frame(idT_numname)

item_item <- projecting_tm(net = idT_numname, method="sum")
item_item <- tnet_igraph(item_item,type="weighted one-mode tnet")
itemmat <- get.adjacency(item_item,attr="weight")
itemmat  #8x8 martrix of items to items

但是我收到了错误消息,而且我不知道如何克服边缘列表中的重复条目&#34;,因为我似乎有必要为了做一个co而有重复的条目 - 发生矩阵:

> idT_numname <- cbind(z1$idT, z1$numname)
> item_item <- projecting_tm(idT_numname, method="sum")
Error in as.tnet(net, type = "binary two-mode tnet") : 
  There are duplicated entries in the edgelist

> item_item <- as.tnet(net = idT_numname, type ="binary two-mode tnet", method="sum")
Error in as.tnet(net = idT_numname, type = "binary two-mode tnet", method = "sum") : 
  unused argument (method = "sum")

> item_item <- as.tnet(net = idT_numname, type ="binary two-mode tnet")
Error in as.tnet(net = idT_numname, type = "binary two-mode tnet") : 
  There are duplicated entries in the edgelist

非常感谢您的帮助。 我喜欢做数据分析,我想每天学习越来越多!

谢谢

0 个答案:

没有答案