2017-08-10 10 views
-1

thisと似たようなことが必要ですが、少し異なります。データフレームを分割するカラムを抽出する

私は33列のデータフレームを持っています。私は最初の列と次の列のそれぞれを持つ一連のデータフレームを持つ必要があります。

どうすればいいですか?インスピレーション上記のリンク問題の答えの1を取得

UPDATE

は、私は次のことを実行しようとしました:

for (i in 2:ncol(data)) 
{temp <- data.frame(data$col1, data[,i]) 
colnames(temp) <- colnames(data)[i] 
assign(colnames(data)[i], temp)  
rm(temp) 
} 

動作しますが、2列のラベルが混同されますつまり、最初のカラムはラベルを取得しますが、2番目のカラムは取得しません。

答えて

2

あなただけのリストにそれらを置くことができます。

mylist <- list() 

for(i in 1:32){ 
    mylist[[i]] <- df[,c(1, i+1)] 
    names(mylist)[i] <- colnames(df)[i+1] 
} 

これにより、第2から始まる、32個のデータフレーム、最初の列と他の連続1とそれぞれのリストを作成します。

+0

おかげで、私はそれがデータフレームであるかのようにさらなる分析を実行することができるのだろうか? –

+1

はい、データフレーム自体を返す 'mylist [[i]]で2列のデータフレームにアクセスすることができます – CPak

+0

@ChiPakは言っているように、リスト内のオブジェクトは依然として' data.frame'クラスです。 – LAP

1

また、次のような機能でそれを行うことができます。

makedf <- function(df, i) { 
    df %>% 
    select(c(1,i)) %>% 
    return() 
} 
0

完了。

for (i in 2:ncol(data)) 
 
{temp <- data.frame(data[,1], data[,i]) 
 
colnames(temp) <- c("col1", colnames(data)[i]) 
 
assign(colnames(data)[i], temp) 
 
rm(temp) 
 
}

+0

まあ、このようにすることはできますが、すべてのデータフレームを含む1つのリストは、32のデータフレームで地球環境を乱雑にするよりはるかに効率的です。このリストを使用すると、すべてのサブセットにわたってさらに計算をループすることもできます。 – LAP

+0

各データフレームのベクトルを分割して別々の分析を実行しなくても、ソリューションが簡単だと思いますか? –

+0

'lapply()'を使うだけで、リストを解析することができます。ベクトルを分割するとどういう意味ですか? – LAP

関連する問題