代码之家  ›  专栏  ›  技术社区  ›  H. dashti

从r中的两个数据帧创建联系人映射

  •  1
  • H. dashti  · 技术社区  · 7 年前

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

    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、 e.矩阵的条目(i,j)显示了在 gene\u基序i和gene\u基序j。

    1 回复  |  直到 7 年前
        1
  •  0
  •   missuse    7 年前

    也许这种方法:

    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感兴趣,然后进行共现计算。