わからないサブセット化されているデータフレームを変更%に%で使用されるには:R - サンプル私は完全に次の行動の理由を理解していないので、私が正しく質問を題した場合
dfSet <- data.frame(ID = sample(1:15, size = 15, replace = FALSE), va1 = NA, va3 = 0, stringsAsFactors = FALSE)
dfSet[1:10, ]$va1 <- 'o1'
dfSet[11:15, ]$va1 <- 'o2'
dfSet[dfSet$ID %in% sample(dfSet[dfSet$va1 == 'o1', ]$ID, 7, replace = FALSE), ]$va3 <- 1
print(length(unique(dfSet$ID)))
私は最終的な印刷することを期待します15を示していますが、そうではありません。代わりに13または14が表示され、dfSetは途中で変更され、同じIDを持つ行が少なくとも2つ存在します。
dfSet[dfSet$ID %in% sample(dfSet[dfSet$va1 == 'o1', ]$ID, 7, replace = FALSE), ]$va3 <- 1
変更する$ ID列 - 私はなぜわからないのですか?
回避策:すべてが期待通りに動作します。この場合
temp <- sample(dfSet[dfSet$va1 == 'o1', ]$ID, 7, replace = FALSE)
dfSet[dfSet$ID %in% temp, ]$va3 <- 1
- ユニークなIDを持つ15行があります。
なぜ%in%のサンプルを直接使用するのがデータフレームを変更するのでしょうか?
"dfSet [dfSet $ ID%in%sample(dfSet [dfSet $ va1 == 'o1'、] $ ID、7、replace = FALSE)、" va3 "] < - 1 '。この問題は、答えを明確にするために苦労しているにもかかわらず、[< - 'と' $ < - 'の両方の評価にあるようです。 – MrFlick
あなたの "回避策"はすべての場合に有効でしょうか?それとも、私はsthを知っている必要がありますか?私はあなたの解決策を大量に使うつもりです(それは1ライナーなので)、私はそれがOKであることを確認したいと思います。 –
はい。 '[]'と '$'を '< - 'と組み合わせてはいけません。ただ一つだけをデータフレームで使用すれば安全です。 – MrFlick