在R中重塑数据

在R中重塑数据,r,reshape,R,Reshape,我想从这个数据框中得到一个矩阵。如果一对基因之间存在关系,则该值应以1为基础,如果不存在关系,则以0为基础。因此ADRA1D和ADK的值为1,其他对的值也为1。但是没有ADK和AR对,所以在这个矩阵中它应该是0 tab <- read.table(text="ID gene1 gene2 1 ADRA1D ADK 2 ADRA1B ADK 3 ADRA1A ADK 4 ADRB1 ASIC1 5 ADRB1 ADK 6 ADRB2 ASIC1

我想从这个数据框中得到一个矩阵。如果一对基因之间存在关系,则该值应以1为基础,如果不存在关系,则以0为基础。因此ADRA1D和ADK的值为1,其他对的值也为1。但是没有ADK和AR对,所以在这个矩阵中它应该是0

tab <- read.table(text="ID  gene1   gene2
1   ADRA1D  ADK
2   ADRA1B  ADK
3   ADRA1A  ADK
4   ADRB1   ASIC1
5   ADRB1   ADK
6   ADRB2   ASIC1
7   ADRB2   ADK
8   AGTR1   ACHE
9   AGTR1   ADK
10  ALOX5   ADRB1
11  ALOX5   ADRB2
12  ALPPL2  ADRB1 
13  ALPPL2  ADRB2
14  AMY2A   AGTR1
15  AR  ADORA1
16  AR  ADRA1D
17  AR  ADRA1B
18  AR  ADRA1A
19  AR  ADRA2A
20  AR  ADRA2B", header=TRUE, stringsAsFactors=FALSE)

您可以通过
功能实现这一点:

> table(tab$gene1, tab$gene2)

         ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ASIC1
  ADRA1A    0   1      0      0      0      0      0      0     0     0     0     0
  ADRA1B    0   1      0      0      0      0      0      0     0     0     0     0
  ADRA1D    0   1      0      0      0      0      0      0     0     0     0     0
  ADRB1     0   1      0      0      0      0      0      0     0     0     0     1
  ADRB2     0   1      0      0      0      0      0      0     0     0     0     1
  AGTR1     1   1      0      0      0      0      0      0     0     0     0     0
  ALOX5     0   0      0      0      0      0      0      0     1     1     0     0
  ALPPL2    0   0      0      0      0      0      0      0     1     1     0     0
  AMY2A     0   0      0      0      0      0      0      0     0     0     1     0
  AR        0   0      1      1      1      1      1      1     0     0     0     0
如果需要矩阵结构,请使用
as.matrix

编辑##:对于对称矩阵

要在使用
table
时生成符号矩阵,需要两个参数具有相同的级别,这里的值不是因子而是字符串,然后没有级别,但却是相同的。在gene2中,每个唯一的gene1至少需要出现一次,反之亦然

为此,我建议您创建一个包含所有基因的载体(我使用了
sort(unique(c)(unique(tab$gene1)、unique(tab$gene2)))

我将“gene1”与这个向量合并,保持所有发生的事件都没有对应,它将生成NA而不是与某个东西连接。 “基因2”也是一样

现在,在“gene1”和“gene2”中,每个基因至少都有一个,您可以
表格

genes <- c('ACHE','ADK','ADORA1','ADRA1A','ADRA1B','ADRA1D','ADRA2A','ADRA2B','ADRB1','ADRB2','AGTR1','ALOX5','ALPPL2','AMY2A','AR','ASIC1')

df <- merge(tab, as.data.frame(genes), by.x = "gene1", by.y = "genes", all = TRUE)
df <- merge(df, as.data.frame(genes), by.x = "gene2", by.y = "genes", all = TRUE)

> table(df$gene1, df$gene2)

         ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ALOX5 ALPPL2 AMY2A AR ASIC1
  ACHE      0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADK       0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADORA1    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1A    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1B    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1D    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA2A    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA2B    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRB1     0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     1
  ADRB2     0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     1
  AGTR1     1   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ALOX5     0   0      0      0      0      0      0      0     1     1     0     0      0     0  0     0
  ALPPL2    0   0      0      0      0      0      0      0     1     1     0     0      0     0  0     0
  AMY2A     0   0      0      0      0      0      0      0     0     0     1     0      0     0  0     0
  AR        0   0      1      1      1      1      1      1     0     0     0     0      0     0  0     0
  ASIC1     0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0

基因您可以通过
功能实现这一点:

> table(tab$gene1, tab$gene2)

         ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ASIC1
  ADRA1A    0   1      0      0      0      0      0      0     0     0     0     0
  ADRA1B    0   1      0      0      0      0      0      0     0     0     0     0
  ADRA1D    0   1      0      0      0      0      0      0     0     0     0     0
  ADRB1     0   1      0      0      0      0      0      0     0     0     0     1
  ADRB2     0   1      0      0      0      0      0      0     0     0     0     1
  AGTR1     1   1      0      0      0      0      0      0     0     0     0     0
  ALOX5     0   0      0      0      0      0      0      0     1     1     0     0
  ALPPL2    0   0      0      0      0      0      0      0     1     1     0     0
  AMY2A     0   0      0      0      0      0      0      0     0     0     1     0
  AR        0   0      1      1      1      1      1      1     0     0     0     0
如果需要矩阵结构,请使用
as.matrix

编辑##:对于对称矩阵

要在使用
table
时生成符号矩阵,需要两个参数具有相同的级别,这里的值不是因子而是字符串,然后没有级别,但却是相同的。在gene2中,每个唯一的gene1至少需要出现一次,反之亦然

为此,我建议您创建一个包含所有基因的载体(我使用了
sort(unique(c)(unique(tab$gene1)、unique(tab$gene2)))

我将“gene1”与这个向量合并,保持所有发生的事件都没有对应,它将生成NA而不是与某个东西连接。 “基因2”也是一样

现在,在“gene1”和“gene2”中,每个基因至少都有一个,您可以
表格

genes <- c('ACHE','ADK','ADORA1','ADRA1A','ADRA1B','ADRA1D','ADRA2A','ADRA2B','ADRB1','ADRB2','AGTR1','ALOX5','ALPPL2','AMY2A','AR','ASIC1')

df <- merge(tab, as.data.frame(genes), by.x = "gene1", by.y = "genes", all = TRUE)
df <- merge(df, as.data.frame(genes), by.x = "gene2", by.y = "genes", all = TRUE)

> table(df$gene1, df$gene2)

         ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ALOX5 ALPPL2 AMY2A AR ASIC1
  ACHE      0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADK       0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADORA1    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1A    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1B    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1D    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA2A    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA2B    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRB1     0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     1
  ADRB2     0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     1
  AGTR1     1   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ALOX5     0   0      0      0      0      0      0      0     1     1     0     0      0     0  0     0
  ALPPL2    0   0      0      0      0      0      0      0     1     1     0     0      0     0  0     0
  AMY2A     0   0      0      0      0      0      0      0     0     0     1     0      0     0  0     0
  AR        0   0      1      1      1      1      1      1     0     0     0     0      0     0  0     0
  ASIC1     0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0

基因您可以通过
功能实现这一点:

> table(tab$gene1, tab$gene2)

         ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ASIC1
  ADRA1A    0   1      0      0      0      0      0      0     0     0     0     0
  ADRA1B    0   1      0      0      0      0      0      0     0     0     0     0
  ADRA1D    0   1      0      0      0      0      0      0     0     0     0     0
  ADRB1     0   1      0      0      0      0      0      0     0     0     0     1
  ADRB2     0   1      0      0      0      0      0      0     0     0     0     1
  AGTR1     1   1      0      0      0      0      0      0     0     0     0     0
  ALOX5     0   0      0      0      0      0      0      0     1     1     0     0
  ALPPL2    0   0      0      0      0      0      0      0     1     1     0     0
  AMY2A     0   0      0      0      0      0      0      0     0     0     1     0
  AR        0   0      1      1      1      1      1      1     0     0     0     0
如果需要矩阵结构,请使用
as.matrix

编辑##:对于对称矩阵

要在使用
table
时生成符号矩阵,需要两个参数具有相同的级别,这里的值不是因子而是字符串,然后没有级别,但却是相同的。在gene2中,每个唯一的gene1至少需要出现一次,反之亦然

为此,我建议您创建一个包含所有基因的载体(我使用了
sort(unique(c)(unique(tab$gene1)、unique(tab$gene2)))

我将“gene1”与这个向量合并,保持所有发生的事件都没有对应,它将生成NA而不是与某个东西连接。 “基因2”也是一样

现在,在“gene1”和“gene2”中,每个基因至少都有一个,您可以
表格

genes <- c('ACHE','ADK','ADORA1','ADRA1A','ADRA1B','ADRA1D','ADRA2A','ADRA2B','ADRB1','ADRB2','AGTR1','ALOX5','ALPPL2','AMY2A','AR','ASIC1')

df <- merge(tab, as.data.frame(genes), by.x = "gene1", by.y = "genes", all = TRUE)
df <- merge(df, as.data.frame(genes), by.x = "gene2", by.y = "genes", all = TRUE)

> table(df$gene1, df$gene2)

         ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ALOX5 ALPPL2 AMY2A AR ASIC1
  ACHE      0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADK       0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADORA1    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1A    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1B    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1D    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA2A    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA2B    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRB1     0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     1
  ADRB2     0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     1
  AGTR1     1   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ALOX5     0   0      0      0      0      0      0      0     1     1     0     0      0     0  0     0
  ALPPL2    0   0      0      0      0      0      0      0     1     1     0     0      0     0  0     0
  AMY2A     0   0      0      0      0      0      0      0     0     0     1     0      0     0  0     0
  AR        0   0      1      1      1      1      1      1     0     0     0     0      0     0  0     0
  ASIC1     0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0

基因您可以通过
功能实现这一点:

> table(tab$gene1, tab$gene2)

         ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ASIC1
  ADRA1A    0   1      0      0      0      0      0      0     0     0     0     0
  ADRA1B    0   1      0      0      0      0      0      0     0     0     0     0
  ADRA1D    0   1      0      0      0      0      0      0     0     0     0     0
  ADRB1     0   1      0      0      0      0      0      0     0     0     0     1
  ADRB2     0   1      0      0      0      0      0      0     0     0     0     1
  AGTR1     1   1      0      0      0      0      0      0     0     0     0     0
  ALOX5     0   0      0      0      0      0      0      0     1     1     0     0
  ALPPL2    0   0      0      0      0      0      0      0     1     1     0     0
  AMY2A     0   0      0      0      0      0      0      0     0     0     1     0
  AR        0   0      1      1      1      1      1      1     0     0     0     0
如果需要矩阵结构,请使用
as.matrix

编辑##:对于对称矩阵

要在使用
table
时生成符号矩阵,需要两个参数具有相同的级别,这里的值不是因子而是字符串,然后没有级别,但却是相同的。在gene2中,每个唯一的gene1至少需要出现一次,反之亦然

为此,我建议您创建一个包含所有基因的载体(我使用了
sort(unique(c)(unique(tab$gene1)、unique(tab$gene2)))

我将“gene1”与这个向量合并,保持所有发生的事件都没有对应,它将生成NA而不是与某个东西连接。 “基因2”也是一样

现在,在“gene1”和“gene2”中,每个基因至少都有一个,您可以
表格

genes <- c('ACHE','ADK','ADORA1','ADRA1A','ADRA1B','ADRA1D','ADRA2A','ADRA2B','ADRB1','ADRB2','AGTR1','ALOX5','ALPPL2','AMY2A','AR','ASIC1')

df <- merge(tab, as.data.frame(genes), by.x = "gene1", by.y = "genes", all = TRUE)
df <- merge(df, as.data.frame(genes), by.x = "gene2", by.y = "genes", all = TRUE)

> table(df$gene1, df$gene2)

         ACHE ADK ADORA1 ADRA1A ADRA1B ADRA1D ADRA2A ADRA2B ADRB1 ADRB2 AGTR1 ALOX5 ALPPL2 AMY2A AR ASIC1
  ACHE      0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADK       0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADORA1    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1A    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1B    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA1D    0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA2A    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRA2B    0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ADRB1     0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     1
  ADRB2     0   1      0      0      0      0      0      0     0     0     0     0      0     0  0     1
  AGTR1     1   1      0      0      0      0      0      0     0     0     0     0      0     0  0     0
  ALOX5     0   0      0      0      0      0      0      0     1     1     0     0      0     0  0     0
  ALPPL2    0   0      0      0      0      0      0      0     1     1     0     0      0     0  0     0
  AMY2A     0   0      0      0      0      0      0      0     0     0     1     0      0     0  0     0
  AR        0   0      1      1      1      1      1      1     0     0     0     0      0     0  0     0
  ASIC1     0   0      0      0      0      0      0      0     0     0     0     0      0     0  0     0

基因如果不强制使用
重塑
我建议看一下
igraph.
下面是使用
igraph
包获得对称矩阵的一种方法。我们首先将数据帧(相关的2列)转换为
igraph
对象,然后
获取邻接
执行必要的操作

library(igraph)
g <- graph.data.frame(tab[,c(2,3)])
get.adjacency(g)

使用
igraph
的一个优点是,现在可以使用许多基于图形的距离计算方法。请务必查看
最短路径

如果不强制使用
重塑
我建议查看
igraph.
下面是使用
igraph
包获得对称矩阵的一种方法。我们首先将数据帧(相关的2列)转换为
igraph
对象,然后
获取邻接
执行必要的操作

library(igraph)
g <- graph.data.frame(tab[,c(2,3)])
get.adjacency(g)

使用
igraph
的一个优点是,现在可以使用许多基于图形的距离计算方法。请务必查看
最短路径

如果不强制使用
重塑
我建议查看
igraph.
下面是使用
igraph
包获得对称矩阵的一种方法。我们首先将数据帧(相关的2列)转换为
igraph
对象,然后
获取邻接
执行必要的操作

library(igraph)
g <- graph.data.frame(tab[,c(2,3)])
get.adjacency(g)

使用
igraph
的一个优点是,现在可以使用许多基于图形的距离计算方法。请务必查看
最短路径

如果不强制使用
重塑
我建议查看
igraph.
下面是使用
igraph
包获得对称矩阵的一种方法。我们首先将数据帧(相关的2列)转换为
igraph
对象,然后
获取邻接
执行必要的操作

library(igraph)
g <- graph.data.frame(tab[,c(2,3)])
get.adjacency(g)
使用
igraph
的一个优点是,许多基于图形的距离计算方法现在可用于y