81

データ フレームをいくつかの小さなフレームに分割したいと考えています。これは非常に些細な質問のように見えますが、Web 検索から解決策を見つけることができません。

4

8 に答える 8

69

データ フレームを任意の数の小さなデータ フレームに分割することもできます。ここでは、2 つのデータフレームに分割します。

x = data.frame(num = 1:26, let = letters, LET = LETTERS)
set.seed(10)
split(x, sample(rep(1:2, 13)))

与える

$`1`
   num let LET
3    3   c   C
6    6   f   F
10  10   j   J
12  12   l   L
14  14   n   N
15  15   o   O
17  17   q   Q
18  18   r   R
20  20   t   T
21  21   u   U
22  22   v   V
23  23   w   W
26  26   z   Z

$`2`
   num let LET
1    1   a   A
2    2   b   B
4    4   d   D
5    5   e   E
7    7   g   G
8    8   h   H
9    9   i   I
11  11   k   K
13  13   m   M
16  16   p   P
19  19   s   S
24  24   x   X
25  25   y   Y

既存の列に基づいてデータ フレームを分割することもできます。たとえば、 のcyl列に基づいて 3 つのデータ フレームを作成するには、次のようにしmtcarsます。

split(mtcars,mtcars$cyl)
于 2010-07-21T18:47:24.510 に答える
19

変数の値に応じてデータフレームを分割する場合は、パッケージdaply()から使用することをお勧めします。plyr

library(plyr)
x <- daply(df, .(splitting_variable), function(x)return(x))

現在、xデータフレームの配列です。データフレームの 1 つにアクセスするには、分割変数のレベルの名前でインデックスを付けることができます。

x$Level1
#or
x[["Level1"]]

ただし、データを多くのデータフレームに分割する前に、データを処理するより賢い方法は他にないと確信しています。

于 2010-07-21T18:28:11.567 に答える
14

あなたも使うことができます

data2 <- data[data$sum_points == 2500, ]

これにより、sum_points=2500の値を持つデータフレームが作成されます

それは与えます :

airfoils sum_points field_points   init_t contour_t   field_t
...
491        5       2500         5625 0.000086  0.004272  6.321774
498        5       2500         5625 0.000087  0.004507  6.325083
504        5       2500         5625 0.000088  0.004370  6.336034
603        5        250        10000 0.000072  0.000525  1.111278
577        5        250        10000 0.000104  0.000559  1.111431
587        5        250        10000 0.000072  0.000528  1.111524
606        5        250        10000 0.000079  0.000538  1.111685
....
> data2 <- data[data$sum_points == 2500, ]
> data2
airfoils sum_points field_points   init_t contour_t   field_t
108        5       2500          625 0.000082  0.004329  0.733109
106        5       2500          625 0.000102  0.004564  0.733243
117        5       2500          625 0.000087  0.004321  0.733274
112        5       2500          625 0.000081  0.004428  0.733587
于 2011-07-28T13:30:43.660 に答える
13

私はあなたを助けるかもしれない一種のRFCを投稿しました:Rでベクトルをチャンクに分割します

x = data.frame(num = 1:26, let = letters, LET = LETTERS)
## number of chunks
n <- 2
dfchunk <- split(x, factor(sort(rank(row.names(x))%%n)))
dfchunk
$`0`
   num let LET
1    1   a   A
2    2   b   B
3    3   c   C
4    4   d   D
5    5   e   E
6    6   f   F
7    7   g   G
8    8   h   H
9    9   i   I
10  10   j   J
11  11   k   K
12  12   l   L
13  13   m   M

$`1`
   num let LET
14  14   n   N
15  15   o   O
16  16   p   P
17  17   q   Q
18  18   r   R
19  19   s   S
20  20   t   T
21  21   u   U
22  22   v   V
23  23   w   W
24  24   x   X
25  25   y   Y
26  26   z   Z

乾杯、セバスチャン

于 2010-07-23T13:09:18.207 に答える
7

subset()も役に立ちます:

subset(DATAFRAME, COLUMNNAME == "")

調査パッケージの場合、surveyパッケージは適切でしょうか?

http://faculty.washington.edu/tlumley/survey/

于 2010-07-21T18:37:32.737 に答える
6

必要な答えは、データ フレームを分割する方法と理由によって大きく異なります。

たとえば、一部の変数を省略したい場合は、データベースの特定の列から新しいデータ フレームを作成できます。データ フレームの後の括弧内の添え字は、行番号と列番号を示します。完全な説明については、Spotry を参照してください。

newdf <- mydf[,1:3]

または、特定の行を選択できます。

newdf <- mydf[1:3,]

また、これらの添え字は、特定の値を含む行の選択や、目的の値を持つ要素の選択など、論理テストにもなります。

残ったチャンクで何をしたいですか?データベースの各チャンクで同じ操作を実行する必要がありますか? 次に、データ フレームのサブセットが、データ フレームの各チャンクに対して同じコマンドを実行するのに役立つ便利なオブジェクト (リストなど) になるようにする必要があります。

于 2010-07-22T18:21:30.157 に答える
3

いずれかの列の値で分割する場合は、 を使用できますlapply。たとえば、ChickWeightひよこごとに個別のデータセットに分割するには、次のようにします。

data(ChickWeight)
lapply(unique(ChickWeight$Chick), function(x) ChickWeight[ChickWeight$Chick == x,])
于 2015-01-20T01:30:46.063 に答える
3

データ フレームの分割は逆効果のようです。代わりに、分割-適用-結合パラダイムを使用します。たとえば、データを生成します。

df = data.frame(grp=sample(letters, 100, TRUE), x=rnorm(100))

次に、関連する列のみを分割し、scale()関数を各グループの x に適用し、結果を結合します (split<-またはを使用ave)

df$z = 0
split(df$z, df$grp) = lapply(split(df$x, df$grp), scale)
## alternative: df$z = ave(df$x, df$grp, FUN=scale)

これは、data.frames の分割に比べて非常に高速であり、結果は反復せずに下流の分析で引き続き使用できます。dplyr 構文は

library(dplyr)
df %>% group_by(grp) %>% mutate(z=scale(x))

一般に、この dplyr ソリューションは、データ フレームの分割よりも高速ですが、分割-適用-結合ほど高速ではありません。

于 2016-07-19T00:34:00.863 に答える