次のようなデータフレームがあります
c1 c2
1 2
1 3
2 4
2 5
2 2
3 1
3 2
...
一意の c1 値を取得したいのですが、同じ c1 値を持つ行が複数ある場合、c2 を同じ確率で選択できます。たとえば、最終結果は次のようになります。
c1 c2
1 2
2 2
3 2
...
「c1の可能な値ごとにc2をランダムに選択する」ことが私が望むものです。
これを行う簡単な方法を次に示します。あなたのデータフレームがdfと呼ばれているとしましょう。
x = unique(df$c1);
y = sapply(x, function(arg)sample(df$c2[df$c1 == arg], 1));
new_df = data.frame(c1 = x, c2 = y);
c2
の一意の値ごとに の値をサンプリングする簡単な方法を次に示しc1
ます。
aggregate(c2 ~ c1, dat, sample, 1) # dat is the name of you data frame
c1 c2
1 1 2
2 2 4
3 3 1