2

(タイトルは適当に変えてください)

以下のようなリストのリストがあります。私がやりたいことは、ネストされたcbindnamesリストのそれぞれをそのリストの新しい列にすることです。さらに、私はstrsplitそれぞれをnamesしたい/ので、実際にcbindは 2 つの列、つまり 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`)

私のアイデアは、2 つのステップでそれを行うことでした。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

これに関する任意のポインタは非常に高く評価されます, ありがとう!

4

1 に答える 1

2

1 列目と 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)

于 2014-06-06T18:47:58.487 に答える