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