r - 从 R 中的数据框创建连接矩阵

标签 r

我有一些这种形式的数据:

> agreers <- read.csv('agreers.csv')
> attach(agreers)
> head(agreers)
        wain1       wain2 count
1   Founder36 Mnist10_269   673
2    Founder3  Mnist10_19   665
3 Mnist10_140 Mnist10_257   663
4    Founder1   Founder15   659
5   Founder21   Founder25   654
6   Founder15   Founder32   654

我创建了这样的数据 wain1 <= wain2 , 所以每对只在表中出现一次。所以这将是一个无向图。

我想创建一个连接矩阵,像这样:

          Mnist10_269 Mnist10_19 Mnist10_257 . . .
Founder36    673           ?          ?
Founder3       ?         665          ?
Mnist10_140    ?           ?        663
  . . .

如果 agreers 中没有任何数据,? 将为零.所以这是我尝试过的:

> mat = matrix(0, nrow = length(unique(wain1)), ncol = length(unique(wain2)))
> rownames(mat) = unique(wain1)
> colnames(mat) = unique(wain2)
> for(i in as.integer(rownames(agreers))) mat[wain1[i], wain2[i]] = count[i]

做了一些,即mat得到数字更新,但数字不在正确的位置!例如,我希望它返回 673 .

> mat["Founder36","Mnist10_269"]
[1] 0

编辑:这里有更多的数据文件,以显示“因子中的重复水平”问题。请注意,Mnist10_140 在第一列中出现了两次,但在第二列中出现了不同的值。

wain1,wain2,count
Founder36,Mnist10_269,673
Founder3,Mnist10_19,665
Mnist10_140,Mnist10_257,663
Founder1,Founder15,659
Founder21,Founder25,654
Founder15,Founder32,654
Mnist10_140,Mnist10_84,643

当只处理该数据子集时,我收到警告:

> agreers <- read.csv('temp.csv')
> connections <- xtabs(count ~ factor(wain1, levels = wain1) + factor(wain2, levels = wain2), agreers)
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels,  :
  duplicated levels in factors are deprecated

最佳答案

如果你喜欢 base R,你可以使用 table

df <- read.table(header=TRUE, text='   wain1       wain2 count
   Founder36 Mnist10_269   673
    Founder3  Mnist10_19   665
 Mnist10_140 Mnist10_257   663
    Founder1   Founder15   659
   Founder21   Founder25   654
   Founder15   Founder32   654')

tab <- with(df,table(factor(wain1, levels=unique(wain1)),
                   factor(wain2, levels=unique(wain2))))
tab[which(tab == 1)] = df$count
tab

              Mnist10_269 Mnist10_19 Mnist10_257 Founder15 Founder25 Founder32
  Founder36           673          0           0         0         0         0
  Founder3              0        665           0         0         0         0
  Mnist10_140           0          0         663         0         0         0
  Founder1              0          0           0       659         0         0
  Founder21             0          0           0         0       654         0
  Founder15             0          0           0         0         0       654

编辑

正如@DavidArenburg 所建议的,您还可以使用 xtabs

xtabs(count ~ factor(wain1, levels = unique(wain1)) + factor(wain2, levels = unique(wain2)), df)

关于r - 从 R 中的数据框创建连接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28501419/

相关文章:

r - 何时终止正在运行的脚本 R

r - 根据权重可视化节点之间的距离 - 使用 R

r - 如何在大于测试中使用 numeric(0)?

r - tidymodels 解释中的 Logistics_reg() 估计似乎将错误的类别预测为积极结果

r - 使用 R 在关系表中进行数据屏蔽

r - 为什么 R 找不到 auto.arima 函数?

r - 如何使 selectInput() 仅在 R shiny 中选择具有多个类别/因素的列?

r - 如何比较一行中的任何元素是否相同

r - R中的xlsx包将数字数据帧转换为xlsx文件中的文本

r - Flexdashboard 中仪表颜色褪色