通过rownames合并或组合

Lis*_*ann 47 merge r dataframe

在下面的示例中,我有两个数据集(Z和A).我想通过ILMN号码合并或组合这些集合.如果没有匹配,请填写NA.

z <- matrix(c(0,0,1,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,1,1,0,0,0,"RND1","WDR", "PLAC8","TYBSA","GRA","TAF"), nrow=6,
    dimnames=list(c("ILMN_1651838","ILMN_1652371","ILMN_1652464","ILMN_1652952","ILMN_1653026","ILMN_1653103"),c("A","B","C","D","symbol")))

t<-matrix(c("GO:0002009", 8, 342, 1, 0.07, 0.679, 0, 0, 1, 0, 
        "GO:0030334", 6, 343, 1, 0.07, 0.065, 0, 0, 1, 0,
        "GO:0015674", 7, 350, 1, 0.07, 0.065, 1, 0, 0, 0), nrow=10, dimnames= list(c("GO.ID","LEVEL","Annotated","Significant","Expected","resultFisher","ILMN_1652464","ILMN_1651838","ILMN_1711311","ILMN_1653026")))
Run Code Online (Sandbox Code Playgroud)

结果将是这样的:

             [,1]         [,2]         [,3]         [,4]
GO.ID        "GO:0002009" "GO:0030334" "GO:0015674"  NA
LEVEL        "8"          "6"          "7"           NA
Annotated    "342"        "343"        "350"         NA
Significant  "1"          "1"          "1"           NA
Expected     "0.07"       "0.07"       "0.07"        NA
resultFisher "0.679"      "0.065"      "0.065"       NA
ILMN_1652464 "0"          "0"          "1"           PLAC8
ILMN_1651838 "0"          "0"          "0"           RND1
ILMN_1711311 "1"          "1"          "0"           NA
ILMN_1653026 "0"          "0"          "0"           GRA
Run Code Online (Sandbox Code Playgroud)

Jor*_*eys 60

使用合并并将t向量重命名为tt(参见Andrie的PS):

merge(tt,z,by="row.names",all.x=TRUE)[,-(5:8)]
Run Code Online (Sandbox Code Playgroud)

现在,如果你使用数据帧而不是矩阵,这甚至可以变得更容易:

z <- as.data.frame(z)
tt <- as.data.frame(tt)
merge(tt,z["symbol"],by="row.names",all.x=TRUE)
Run Code Online (Sandbox Code Playgroud)


And*_*rie 38

使用match返回所需载体,然后cbind到您的矩阵

cbind(t, z[, "symbol"][match(rownames(t), rownames(z))])

             [,1]         [,2]         [,3]         [,4]   
GO.ID        "GO:0002009" "GO:0030334" "GO:0015674" NA     
LEVEL        "8"          "6"          "7"          NA     
Annotated    "342"        "343"        "350"        NA     
Significant  "1"          "1"          "1"          NA     
Expected     "0.07"       "0.07"       "0.07"       NA     
resultFisher "0.679"      "0.065"      "0.065"      NA     
ILMN_1652464 "0"          "0"          "1"          "PLAC8"
ILMN_1651838 "0"          "0"          "0"          "RND1" 
ILMN_1711311 "1"          "1"          "0"          NA     
ILMN_1653026 "0"          "0"          "0"          "GRA"  
Run Code Online (Sandbox Code Playgroud)

PS. 请注意,t它是用于转置矩阵的基本R函数.通过创建一个名为t的变量,可能会导致下游代码混乱.

  • 请更正PS中的错误.你没有覆盖`t`函数.您正在为用户创建混淆,但数据和函数存储在不同的位置.来吧,测试一下:t < - 矩阵(1:4,2,2); t(t)......有效. (2认同)