1

私は R の初心者であり、オンラインでこれに対する解決策を見つけることができませんでした。

50 個のデータフレームで構成されるリスト オブジェクトがあります。data.frameこのリストを個別のオブジェクトに分割したいのですが、うまくいきません。

手動で行うのは簡単です:

a<-list[[1]]

しかし、50 個のコンポーネントすべてを手動で入力する必要がないように、ループしたいと考えています。これは動作しません:

for(i in 1:n.imp)
    a.i<-comb.txt1[[i]]

単一の(最後の)データフレームのみを生成するためです。

何かご意見は?

追加のコンテキストを次に示します。このリストは、多重代入手順 mi() の結果です。これらの帰属データセットのそれぞれに新しい変数をマージしたいのですが、オブジェクトがリストであるため、その方法がわかりません。

4

3 に答える 3

4

これがあなたが求めているものだと思います:

for(i in 1:length(comb.txt1)) {
    assign(paste0("a.", i), comb.txt1[[i]])
}
于 2012-08-31T12:17:15.620 に答える
2

attach(comb.txt1)リストに名前がある場合、または次のような名前を付ける場合は、を使用できますnames(comb.txt1) <- paste('a', seq_along(comb.txt1), sep='.')

ただし、ワークスペースを 50 で乱雑にするdata.frames必要はおそらくありません。それぞれに追加したい新しい変数data.frameは、原子ベクトルvar(つまり、 のようなベクトルc(1,2,3)) であるとします。withのそれぞれに追加できdata.frameます。listlapply(comb.txt1, function(comb.txt1.DF) within(comb.txt1.DF, new.var <- var))

于 2012-08-31T14:12:38.853 に答える
1

それがあなたが探しているものかどうかはわかりませんが...

データ フレームのリストの作成:

> set.seed(1)
> df1 <- data.frame(a=rnorm(10), b=rnorm(10))
> df2 <- data.frame(a=rnorm(10), b=rnorm(10))
> df3 <- data.frame(a=rnorm(10), b=rnorm(10))

> my.list <- list(df1, df2, df3)

次に、 assign() を lapply() とともに使用します。

> lapply(seq_along(my.list), 
         function(i,x) {assign(paste0("a",i),x[[i]], envir=.GlobalEnv)},
         x=my.list)

> a1
            a           b
1  -0.6264538  1.51178117
2   0.1836433  0.38984324
3  -0.8356286 -0.62124058
4   1.5952808 -2.21469989
5   0.3295078  1.12493092
6  -0.8204684 -0.04493361
7   0.4874291 -0.01619026
8   0.7383247  0.94383621
9   0.5757814  0.82122120
10 -0.3053884  0.59390132
于 2012-08-31T14:03:26.963 に答える