基于R中的公共行合并嵌套

t98cgbkg  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(75)

我知道类似的问题已经在这里被问到了,但是我有两个基因表达的数据框架,两个数据集之间有一些不重叠的基因。我想根据公共行合并两个数据框。我的 Dataframe 看起来像这样:

> print(fibro1[c(1:12),])
          C12    C24    C48    C72    T12    T24    T48    T72
Gnai3  3510.4 2319.1  974.8 2198.7 1936.2  829.9  807.3 1882.1
Cdc45    41.0   22.5   16.1   33.4   44.9    0.0    6.7   32.6
H19       0.0    0.0    0.0    0.0    0.0    0.0    0.0   10.2
Scml2    29.8   43.8   25.0   10.8   79.5    0.0   26.2   46.0
Apoh     35.4    0.0    0.0    0.0   16.6   16.1    0.0    2.8
Narf    231.8  190.5  122.3  181.0  122.0   60.4   54.0  118.8
Cav2    196.9   53.7   36.4  130.9   80.9    6.7   17.9   79.0
Klf6  10478.8 5471.5 3337.1 5059.1 7987.7 2522.5 4117.2 5298.4
Scmh1  4235.9 1464.8  872.0 2254.5 2307.7  799.7  869.1 1959.1
Cox5a   142.4   68.0   97.0  112.8  251.8   23.0  163.9   71.3
Tbx2      5.8    9.5    4.5    5.6   13.4    0.0    8.5    9.6
Ngfr     58.1   60.6   50.7   32.1   46.1   57.7    0.0   10.7
> print(fibro2[c(1:12),])
         C12   C24    C48    C72    T12   T24    T48    T72
Gnai3 1171.0 446.0  278.5  876.2  876.2  45.0  582.3 1040.0
Cdc45   47.8   9.0   19.1   41.0   22.6   0.0   38.5   78.5
H19     77.0  52.2   33.4   36.7  177.9  34.7  402.1  458.6
Scml2    2.3   0.0   10.1    3.0   12.8   0.0    0.0    9.2
Narf    43.0   5.4    4.7   27.9   35.8   2.9   23.8  135.6
Cav2    54.6  23.3    5.3   10.7   64.0   0.0   30.1   40.4
Klf6  2498.4 730.7 1454.1 1033.0 2616.9 421.4 2389.6 2950.4
Scmh1  591.7 129.4  260.5  273.5  457.1  29.2  303.5  534.3
Cox5a   70.9  21.9   39.7   51.0  225.5  25.9  321.2   98.9
Tbx2     6.1   0.0    0.0   10.7    3.5   0.0    7.1   11.0
Tbx4     5.7   0.0    0.0    0.0    5.7   0.0    3.4    9.8
Ngfr    14.2   8.8   21.5   33.8    9.2  18.9   22.5   40.6

我尝试了merge()、inner_join()、semi_join()、intersect()。你有什么建议吗?我希望我的最终数据框有16列交叉行。其他类似问题的行名称顺序相同,因此所使用的函数可以进行一对一比较,但在本例中,行名称的顺序不同,并且存在一些不重叠的行。

fzwojiic

fzwojiic1#

在行名称上使用merge作为单独的列,然后将行名称放回原位。

merge(cbind(row = rownames(fibro1), fibro1), 
      cbind(row = rownames(fibro2), fibro2), by="row", all=T) |> 
  (\(x){rownames(x) <- x$row; x[,-1]})()

输出

C12.x  C24.x  C48.x  C72.x  T12.x  T24.x  T48.x  T72.x  C12.y C24.y
Apoh     35.4    0.0    0.0    0.0   16.6   16.1    0.0    2.8     NA    NA
Cav2    196.9   53.7   36.4  130.9   80.9    6.7   17.9   79.0   54.6  23.3
Cdc45    41.0   22.5   16.1   33.4   44.9    0.0    6.7   32.6   47.8   9.0
Cox5a   142.4   68.0   97.0  112.8  251.8   23.0  163.9   71.3   70.9  21.9
Gnai3  3510.4 2319.1  974.8 2198.7 1936.2  829.9  807.3 1882.1 1171.0 446.0
H19       0.0    0.0    0.0    0.0    0.0    0.0    0.0   10.2   77.0  52.2
Klf6  10478.8 5471.5 3337.1 5059.1 7987.7 2522.5 4117.2 5298.4 2498.4 730.7
Narf    231.8  190.5  122.3  181.0  122.0   60.4   54.0  118.8   43.0   5.4
Ngfr     58.1   60.6   50.7   32.1   46.1   57.7    0.0   10.7   14.2   8.8
Scmh1  4235.9 1464.8  872.0 2254.5 2307.7  799.7  869.1 1959.1  591.7 129.4
Scml2    29.8   43.8   25.0   10.8   79.5    0.0   26.2   46.0    2.3   0.0
Tbx2      5.8    9.5    4.5    5.6   13.4    0.0    8.5    9.6    6.1   0.0
Tbx4       NA     NA     NA     NA     NA     NA     NA     NA    5.7   0.0
       C48.y  C72.y  T12.y T24.y  T48.y  T72.y
Apoh      NA     NA     NA    NA     NA     NA
Cav2     5.3   10.7   64.0   0.0   30.1   40.4
Cdc45   19.1   41.0   22.6   0.0   38.5   78.5
Cox5a   39.7   51.0  225.5  25.9  321.2   98.9
Gnai3  278.5  876.2  876.2  45.0  582.3 1040.0
H19     33.4   36.7  177.9  34.7  402.1  458.6
Klf6  1454.1 1033.0 2616.9 421.4 2389.6 2950.4
Narf     4.7   27.9   35.8   2.9   23.8  135.6
Ngfr    21.5   33.8    9.2  18.9   22.5   40.6
Scmh1  260.5  273.5  457.1  29.2  303.5  534.3
Scml2   10.1    3.0   12.8   0.0    0.0    9.2
Tbx2     0.0   10.7    3.5   0.0    7.1   11.0
Tbx4     0.0    0.0    5.7   0.0    3.4    9.8

相关问题