これは基本的にはquestionの拡張であり、2番目のサブセットを設定している場合は列の値を変更できないことに気づいたためです。ランダムに選択したdata.tableサブセットの値を変更する
random.length <- sample(x = 15:30, size = 1)
dt <- data.table(city=sample(c("Cape Town", "New York", "Pittsburgh", "Tel Aviv", "Amsterdam"), size=random.length, replace = TRUE), score = sample(x=1:10, size = random.length, replace=TRUE))
set.seed(1)
dt[sample(.N,3), score :=9999]
set.seed(1)
dt[sample(.N,3),]
これは予想どおりに機能し、3つのランダムに選択された都市のスコアを9999に変更します。最初のステップでサブセットしてからサンプリングを行い、新しいスコア値を割り当てようとすると、それは不可能です。私が達成したい何
set.seed(1)
dt[city == "New York",][sample(.N,1), score := 55555]
set.seed(1)
dt[city == "New York",][sample(.N,1)]
は、私は、特定のサブセットの一部であり、ランダムにこのサブセットから選択されますいくつかの列の値を変更することができるということです。
- あなたの選択した行ではなく、都市。ちなみに、 'set.seed'は(' sample'が使われた後で)遅すぎます。 – Frank
set.seed()は、最初のケースではスコアが変化し、別のスコアを直接チェックすることができ、2番目のケースでは何も変化しないことを、見やすくするためだけにあります。 – hannes101
'dt [sample(dt [、.I [city ==" New York "]]、3)、score:= 55555]'可能かもしれません。あるいは、各都市で3つのランダムなobsを無効にしたい場合、 'dt [dt [、.I [sample(.N、3)] by = city] $ V1、score:= 55555]' –