2017-09-01 11 views
0

私は大きなデータフレームを持っています(合計で8,500,000セルを少し超えています)、特定の列の値に基づいてこのデータフレームのいくつかのサブセットを作成する必要があります。マスタデータフレームの列の各値に対してデータフレームのサブセットを作成することは可能ですか?

私は上記のサブセットを手作業で作成することができますが、いくつかの値しかない場合はこれを行うことができます。現時点では、私は一意の値取得:

table(df$ColumnX) 

をしてからわずか数値があるとして、そこから個々のデータフレームを構築:

df.subset1 <- df[df$ColumnX == "Subset1", ] 
df.subset2 <- df[df$ColumnX == "Subset2", ] 
... 
df.subsetX <- df[df$ColumnX == "SubsetX", ] 

は、しかし、かなり多くの一意の値がある場合にどこにあります私の目標を適時に達成するためにコンピュータの処理能力が必要となる問題を見てください。

私が知りたいことは、このプロセスを自動化できるかどうかです。このような

何かが私は達成するために期待していますものです:

- List values in Column X 
- Create a new dataframe/subset for each value in Column X 

または:

for(all unique values in Column X) 
    create a new dataframe 
end for 

したがって、私はColumnXの値に基づいて、このような何かを持っているでしょう:

df.subset1 
df.subset2 
... 
df.subsetX 
+0

ただ、 'split'すなわち' dflist <使用 - スプリット(DF、DF $ COLUMNXを) '。これはあなたにデータのリストを与えるでしょう。フレーム –

+0

私は参照してください。そして、リストからdata.framesをどのように抽出するのですか? – MusTheDataGuy

+0

'x < - split(iris、Specis $ Species)'の例を見ると、 'x $ setosa'や' x [[1]] 'や' x [["setosa "]]' –

答えて

1

サンプルデータセット:

zz <- "A1 A2 A3 A4 A5 
Z Z 1 10 12 
E Y 10 12 8 
D X 2 12 15 
Z Z 1 10 12 
D X 2 14 16" 
df <- read.table(text=zz, header = TRUE) 

s1 <- split(df, df$A1) 
list2env(s1,envir=.GlobalEnv) 

リストは、ご使用の環境、私はそれが一般的には、リスト内のデータフレームを維持することは一般的に、より効率的である@docendoに同意

> D 
    A1 A2 A3 A4 A5 
3 D X 2 12 15 
5 D X 2 14 16 
> E 
    A1 A2 A3 A4 A5 
2 E Y 10 12 8 
> Z 
    A1 A2 A3 A4 A5 
1 Z Z 1 10 12 
4 Z Z 1 10 12 
0

にデータフレームとして格納されます。

しかし、レコードのために、あなたもassignを使用することができます。

list_index <- list(1:5, 6:8, 10:13) 

for(i in 1:length(list_index)){ # i <- 1 
    assign(paste0("df_", i), mtcars[list_index[i][[1]], ]) 
} 
関連する問題