4つの列の値を含むデータフレームがあります。
たとえば、次のようにID
、price
、click count
、rating
私がしたいのは、このデータフレームをN個の異なるグループに「分割」して、各グループが同じ分布の価格、クリック数、および評価属性を持つ同じ数の行を持つことです。
私はこれに取り組む方法について少しの考えもないので、アドバイスは強く感謝します!
4つの列の値を含むデータフレームがあります。
たとえば、次のようにID
、price
、click count
、rating
私がしたいのは、このデータフレームをN個の異なるグループに「分割」して、各グループが同じ分布の価格、クリック数、および評価属性を持つ同じ数の行を持つことです。
私はこれに取り組む方法について少しの考えもないので、アドバイスは強く感謝します!
回答:
これは非常に遅い回答ですが、私はこのページを、述べられた問題がどこかで議論されたことがあるかどうかグーグルしながら見つけました。これから誰かがこのページを見つけた場合、私の答えが役立つかもしれません。
私はRパッケージdata.frame
を作成しました。これは、質問が要求したとおりのことを行います。1つまたは複数の基準でグループ間の違いを最小限に抑えながら、a を使用してN個の異なるグループを作成します。これは、ランダムな割り当ての繰り返しに基づく簡単な方法を使用します。これは、承認された応答で推奨される方法でもあります。
これはパッケージminDiffへのリンクです:
述べられた問題に取り組むために、あなたは使うことができました:
library(minDiff)
assigment <- create_groups(dataframe, criteria_scale = c("price", "click count", "rating"), sets_n = N, repetitions = 1000)
このrepetitions
議論により、さまざまなグループをランダムに作成する頻度が決まります。最良の割り当て(グループ間の違いが最小限の割り当て)が返されます。
Alex Aの回答は各グループに等しい確率を与えますが、グループが同じ行数を持つという質問の要求には応えません。R:
stopifnot(nrow(df) %% N == 0)
df <- df[order(runif(nrow(df))), ]
bins <- rep(1:N, nrow(df) / N)
split(df, bins)
これはtidyr / dplyrを使用してネストすることで解決できます
require(dplyr)
require(tidyr)
num_groups = 10
iris %>%
group_by((row_number()-1) %/% (n()/num_groups)) %>%
nest %>% pull(data)
```