2014-06-06 36 views
2

(请随时标题更改为更合适的东西)cbind第i个列表 - 的 - 名单的我的名字:日列表

我有一个列表中,列出像一个下面。我想要做的是将每个嵌套列表的cbind每个names添加到该列表中的新列。另外,我想要strsplitnames/所以实际上cbind是两列,即Nrep = rep1和sp = sp1,每个列的行数与嵌套列表本身的行数相同。

`rep1/sp1` <- read.table(text= "var,X2x,X4x,X6x 
       101337,4.631833,4.4547,11.097333 
       345754,3.727433,10.8560,10.536600" ,header=TRUE, sep=",") 

`rep1/sp2` <- read.table(text= "var,X2x,X4x,X6x 
       101337,5.631833,10.4547,11.097333 
       345754,5.727433,12.8560,10.536600" ,header=TRUE, sep=",") 

dflist <- list(`rep1/sp1`=`rep1/sp1`, `rep1/sp2`=`rep1/sp2`) 

我的想法是尝试分两步做,分别提取names + strsplit,然后cbind各自到正确的嵌套列表,产生如下所示的输出。然而,我无法理解如何走到最后一步。

rep_sp <- names(dflist) 
rep_sp <- strsplit(rep_sp, "/") 
rep_sp <- lapply(rep_sp, function(x) data.frame(t(cbind(x)))) 
rep_sp <- ldply(rep_sp, data.frame) 
colnames(rep_sp) <- c("Nrep","sp") 

# hit the wall... 

所需的输出

> dflist 
$`rep1/sp1` 
Nrep sp var  X2x  X4x  X6x 
rep1 sp1 101337 4.631833 4.4547 11.09733 
rep1 sp1 345754 3.727433 10.8560 10.53660 

$`rep1/sp2` 
Nrep sp var  X2x  X4x  X6x 
rep1 sp2 101337 5.631833 10.4547 11.09733 
rep1 sp2 345754 5.727433 12.8560 10.53660 

对此有何指针将非常感激,谢谢!

回答

2

如果他们没有成为第一和第二列,然后

rep_sp <- names(dflist) 
rep_sp <- strsplit(rep_sp, "/") 
Map(cbind, dflist, 
    Nrep = sapply(rep_sp,'[',1), 
    sp = sapply(rep_sp,'[',2)) 

将运行,是非常简单(只使用基本函数)

$`rep1/sp1` 
    var  X2x  X4x  X6x Nrep sp 
1 101337 4.631833 4.4547 11.097333 rep1 sp1 
2 345754 3.727433 10.8560 10.536600 rep1 sp1 

$`rep1/sp2` 
    var  X2x  X4x  X6x Nrep sp 
1 101337 5.631833 10.4547 11.097333 rep1 sp2 
2 345754 5.727433 12.8560 10.536600 rep1 sp2 

我不”的原因首先,当你使用Map时,它会使用你传递的第一个数据参数来命名列表中的元素。所以首先通过dflist,我保留这些名字。你可以重新安排参数,然后重新设置名称后面的字样names(newobj)<-names(dflist)

+0

干杯,非常感谢!确实是我以后! –