如何在R中将多个行名列表作为数据框返回?

时间:2017-04-19 18:21:34

标签: r dataframe

我在对象lists中有25个列表,我从25个RNAseq数据中对其进行了子集,相关值小于-0.4。

它们具有不同的长度和不同的行名,如下所示。

head(lists)

$Sample1
               Sample1
CWC27        -0.4000203
MCM3AP-AS1   -0.4000415
TAF1D        -0.4000936
SOX21        -0.4003181
PRPF6        -0.4003951
TYSND1       -0.4005185

$Sample2
            Sample2
ZEB1      -0.4000603
BRD7      -0.4001116
AP2B1     -0.4003789
CDH10     -0.4005792

$Sample3
            Sample3
 WIZ      -0.4125093
 RAB22A   -0.4175807
 TMEM143  -0.4176838
 HNRNPUL1 -0.4187072
 SOBP     -0.4194346

我想只返回行名而不是​​值,例如

Sample1       Sample2      Sample3
CWC27         ZEB1         WIZ
MCM3AP-AS1    BRD7         RAB22A
TAF1D         AP2B1        TMEM143
SOX21         CDH10        HNRNPUL1
PRPF6                      SOBP
TYSND1

我迷失了因为我不熟悉R.我试过像

这样的东西
do.call(cbind, lapply(lapply(lists, unlist), "[",
                   unique(unlist(c(sapply(lists,rownames))))))

它没有用,返回

  Sample1       Sample2      Sample3
       NA            NA          NA
       NA            NA          NA
       NA            NA          NA
       NA            NA          NA
       NA            NA          NA
       NA            NA          NA

有人能帮帮我吗?谢谢!

1 个答案:

答案 0 :(得分:1)

打破它:

首先,抓住每个对象的rownames

names_list <- lapply(lists, rownames)

然后,获取最长列表的长度。

max_length <- max(sapply(names_list, length))

然后,将每个列表的长度设置为列表中任何项目的最大长度。任何较短的列表都会填充NA s。

names_list <- lapply(names_list, "length<-", max_length)

最后,转换为data.frame

data.frame(names_list)