2014-06-06 2 views
2

나는 것과 같은 목록 -의 - 목록이는 I를 cbind 목록 일

(더 적절한 뭔가 제목을 변경하여 주시기 바랍니다) 이하. 내가하고 싶은 일은 cbind 각 중첩 목록의 각 names을 해당 목록의 새 열에 연결하는 것입니다. 또한 strsplitnames/이므로 실제로는 cbind이 Nrep = rep1 및 sp = sp1 인 두 열입니다. 각 Nrep은 중첩 목록 자체와 동일한 수의 행을가집니다.

`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)) 

이 작동하고 아주 간단 것이다 다음, 제 1 및 제 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 

내가 'didn를하는 이유 처음에 넣는 것은 Map을 사용할 때 전달한 첫 번째 데이터 매개 변수를 사용하여 목록의 요소 이름을 지정한다는 것입니다. 따라서 dflist을 먼저 전달하면 해당 이름이 보존됩니다. 매개 변수를 다시 배열 한 다음 afterword와 같은 이름을 재설정 할 수 있습니다. names(newobj)<-names(dflist)

+0

건배, 많이 감사합니다! 나는 뒤를이었다! –