Rのいくつかの条件に基づいて大きなデータフレームを小さなデータフレームに分割しようとしています。 これらの各データフレームを分割された変数に基づいて名前が付けられますが、1660を超える新しい「サブ」データフレームがあるため、手動で行うことはできません。スプリットを使用してRで新しいデータフレームを作成し、変数条件に基づいて名前を変更
全体のデータフレームの例:
ID LENGTH GRADE CODE DURATION STATUS
1 1 A1 ABC Less than 10 Y
2 2 A1 ABC More than 10 Y
3 1 A1 DEF Less than 10 Y
4 2 A2 ABC Less than 10 Y
5 1 B1 ABC More than 10 Y
6 3 B2 DEF Less than 10 Y
およそ1660空でないグループに7つの変数によって分割される90万のエントリがあります - 私は、新しいグループ化されたデータフレーム
を作成することによって、これを発見しました> Grouped_DF<- DF %>% group_by(LENGTH,GRADE,CODE,DURATION,STATUS,...)
> nrow(Grouped_Data)
[1] 1660
私が望むグループで構成されていますが、これらのグループごとに新しいデータフレームを作成し、各グループに属するすべてのエントリを作成します。私は、スプリット機能を使って試してみました:
次のリストを生成しSplitGroups<-split(DF, with(DF, interaction(LENGTH,GRADE,CODE,DURATION,STATUS,..)))
:
> class(SplitGroups)
[1] "list"
> length(SplitGroups)
[1] 24480
出力の例を:
> SplitGroups
$1.A1.ABC.Less Than 10.N`
# A tibble: 10 x 65
# Groups: ID [10]
# ... with 65 variables:
は今、私は非空のデータフレームを取りたいです例えば、 '1.A1.ABC.Less Than 10.N'(または同様のもの)のように名前を変更し、これをグローバル環境に格納します。
私は、これは、たとえば、サブセットを使用して行うことができる承知しています:
1.A1.ABC.LessThan10.N <- subset(DF, LENGTH==1 & GRADE=="A1" & CODE=="ABC" & .....)
というように、これは必要なサブセットの数のための実用的ではありません。
ありがとうございます、ありがとうございます。
'splitGroups < - splitGroups [sapply(splitGroups、nrow)> 0]'はすべての空のdata.framesを削除します。これをリストに格納する方が、data.framesと体系的にやり取りする方が簡単なので、おそらく好ましい方法です。これを行うためのヒントについては、[gregorの投稿](https://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)を参照してください。 – lmo
'Filter(function(x)nrow(x)> 0、splitGroups)'を使うことができます。 – akrun