2014-06-06 74 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

乾杯,非常感謝!確實是我以後! –