代码之家  ›  专栏  ›  技术社区  ›  Zach Eisner

用行名称替换r中数据帧中的值

  •  0
  • Zach Eisner  · 技术社区  · 8 年前

    好的,我有一个数据帧(829x2),其中第一列由另一个矩阵的行号组成。我需要用第二个数据帧(676X2)第二列中的值(ID号)替换这些行号。

    以下是第一个数据帧的数据帧1和2的前几行

    数据帧1:

       Col1(rownames to be replaced)          Col2
    X1 167                                 -2.623973e-01
    X2 c(14, 275)                          -2.241113e-01
    X3 4                                   -3.066684e-01
    X4 c(493, 165, 170, 187, 224, 246, 262)-2.369324e-01
    X8 c (207, 233, 235, 236, 622, 624)    -8.503367e-02
    X10 369                                -2.217171e-01
    

      Col1      Col2(Data I want replace the rownames)
    1 Formic    C00058 
    2 Methanoic C00058 
    3 Ethanoic  C00033
    4 Acetic    C00033
    5 Propionic C00163
    6 Propanoic C00163
    7 Butyric   C00246
    

       Col1                              Col2
    X1 C00043                          -2.623973e-01
    X2 c(C00012, C00125)               -2.241113e-01
    X3 C00033                          -3.066684e-01
    X4 c(C00023, C00078, etc...)       -2.369324e-01
    

    这是数据帧1的dput()。KEGGnumber=Col1 Cor=Col2

    >dput(datamap2[1:10,])
    structure(list(KEGGnumber = structure(list(X1 = 167, X2 = c(14, 
    275), X3 = 4, X4 = c(493, 165, 170, 187, 224, 246, 262), X8 = c(207, 
    233, 235, 236, 622, 624), X10 = 369, X11 = c(207, 233, 235, 236, 
    622, 624), X12 = 17, X13 = c(225, 240, 622, 623, 626, 631), X21 = c(447, 
    579)), .Names = c("X1", "X2", "X3", "X4", "X8", "X10", "X11", 
    "X12", "X13", "X21")), Cor = c(-0.26239726267789, -0.22411133150271, 
    -0.30666840337651, -0.236932418052063, -0.085033673316946, -0.221717142242715, 
    -0.23574540607512, -0.254068790827129, -0.410952995109905, 0.0585077720606303
    )), .Names = c("KEGGnumber", "Cor"), row.names = c("X1", "X2", 
    "X3", "X4", "X8", "X10", "X11", "X12", "X13", "X21"), class = "data.frame")
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   akuiper    8 年前

    下面是一种使用 lapply :

    df$KEGGnumber <- lapply(df$KEGGnumber, function(rows) df2$Col2[rows])
    df
    #        KEGGnumber        Cor
    # X1         C00058 -0.2623973
    # X2 C00163, C00246 -0.2241113
    # X3         C00033 -0.3066684
    # X4 C00033, C00033 -0.2369324
    

    我稍微修改了一下您的数据,以便它与您提供的数据帧2相匹配:

    df
    #    KEGGnumber        Cor
    # X1          2 -0.2623973
    # X2       5, 7 -0.2241113
    # X3          4 -0.3066684
    # X4       3, 4 -0.2369324
    
    df2
    #        Col1   Col2
    # 1    Formic C00058
    # 2 Methanoic C00058
    # 3  Ethanoic C00033
    # 4    Acetic C00033
    # 5 Propionic C00163
    # 6 Propanoic C00163
    # 7   Butyric C00246