【问题标题】:Create a contact map from two Dataframe in r从 r 中的两个 Dataframe 创建联系人地图
【发布时间】:2018-03-25 00:02:22
【问题描述】:

我有两个类似的数据如下:

df1 <-structure(
list(
  sample_id = c(1L, 1L, 1L, 1L, 2L, 2L),
  motif = c("CT-G.A", "TA-C.C", "TC-G.C", "TC-G.C", "CG-A.T", "CA-G.T"),
  chromosome = c("chr1", "chr1", "chr2", "chr2", "chr2", "chr2"),
  position = c(7300L, 1000L, 1200L, 3000L, 12000L, 2000L)
),
.Names = c("sample_id", "motif", "chromosome", "position"),
class = "data.frame",
row.names = c(NA,-6L))
df2 <-structure(
list(
  geneID = c("E1", "E2", "E3", "E4", "E5"),
  chromosome = c("chr1", "chr1", "chr2", "chr2", "chr2"),
  start = c(100L, 1100L, 1200L,400L, 12000L),
  end = c(10300L, 20100L, 2000L, 20000L, 20000L)
),
.Names = c("geneID", "chromosome", "start", "end"),
class = "data.frame",
row.names = c(NA,-5L))

df1 的每一行都与一个突变相关,df1 的第一列是患者姓名。 df1 的第二列是该突变的基序,第三列显示其染色体,第四列表示发生突变的位置。 df2 的第一列代表基因的名称。第二列代表染色体。第三和第四列代表基因的开始和结束。

所以我想从这些数据中创建一个矩阵,每个条目显示在同一基因上具有相同基序的患者数量,如下所示:

          E1_CT-G.A    E1_TA-C.C      ... E5_CA-G.T
E1_CT-G.A     1            1                   0   
E1_TA-C.C     1            1                   0     
.             .            .                   .   
.             .            .                   .      
.             .            .                   .      
E5_CA-G.T     0            0         ...       0      

即矩阵的条目 (i,j) 显示在 包括gene_motif i 和gene_motif j。

【问题讨论】:

  • 或许crossprod(table(df1[1:2]))
  • 我需要 df2 来查找基因名称!

标签: r matrix


【解决方案1】:

也许这种方法:

library(dplyr)
library(fuzzyjoin)

df1 %>%
  fuzzy_join(df2, by = c("position" = "start", "position" = "end", "chromosome" = "chromosome"), 
             match_fun = list(`>=`, `<=`, `==`)) %>%
  mutate(gene_motif = paste(geneID, motif, sep = "_")) %>%
  group_by(sample_id, gene_motif) %>%
  filter(!duplicated(gene_motif)) %>%
  select(sample_id, gene_motif) %>%
  table %>%
  crossprod 

           gene_motif
gene_motif  E1_CT-G.A E1_TA-C.C E2_CT-G.A E3_CA-G.T E3_TC-G.C E4_CA-G.T E4_CG-A.T E4_TC-G.C E5_CG-A.T
  E1_CT-G.A         1         1         1         0         1         0         0         1         0
  E1_TA-C.C         1         1         1         0         1         0         0         1         0
  E2_CT-G.A         1         1         1         0         1         0         0         1         0
  E3_CA-G.T         0         0         0         1         0         1         1         0         1
  E3_TC-G.C         1         1         1         0         1         0         0         1         0
  E4_CA-G.T         0         0         0         1         0         1         1         0         1
  E4_CG-A.T         0         0         0         1         0         1         1         0         1
  E4_TC-G.C         1         1         1         0         1         0         0         1         0
  E5_CG-A.T         0         0         0         1         0         1         1         0         1

所以首先根据位置和染色体执行模糊连接,然后添加一个由geneID 和motif 组合而成的附加列,过滤重复项,因为您对同时发生的突变的数量不感兴趣,但是而是采样 id,然后进行共现计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2017-02-17
    • 2020-08-09
    • 2013-12-16
    • 1970-01-01
    • 2016-02-04
    • 2013-01-11
    相关资源
    最近更新 更多