同じ行の他の列の値に基づいて列内の値を再コードするレガシーRコードを継承しました。あなたは結果を検査した場合R:因果列を論理的に扱ったデータフレームを誤ってサブセット化する
df <- data.frame(value = c(1, 2, 3, 4, 5, 6),
reversed = c("true", "false",
"true", "true",
"false", "false"))
str(df)
#> 'data.frame': 6 obs. of 2 variables:
#> $ value : num 1 2 3 4 5 6
#> $ reversed: Factor w/ 2 levels "false","true": 2 1 2 2 1 1
df$recoded_value <- df$value
df$recoded_value[df$reversed] <- 7 - df$recoded_value[df$reversed]
、これは予期しない結果を生成しますので、同様に、現実には、これらの値は、(文字列がに変換される)実際因子であったとき、それは誤ってブール値であると考えられていました。 df[2, "recoded_value"]
は5ですが、その目的は2です。さらに、df[3, "recoded_value"]
は3ですが、その目的は4です。
私はここで何が起こっているのか理解したいと思います。私の最初の仮説は、Rが1つの因子レベルをTRUE
と扱い、もう1つがFALSE
であるというものでした。
df[c(1,3), ]
#> value reversed recoded_value
#> 1 1 true 6
#> 3 3 true 3
df[c(2,5), ]
#> value reversed recoded_value
#> 2 2 false 5
#> 5 5 false 5
はここで何が起こっている:同じ因子レベルががは同様に処理されていないので、しかし、これは明らかにそうではありませんか?
明確にする:問題の解決には興味がありません。私は目的の結果を得るためにコードを修正する方法を知っています。私は理解したい:
- なぜこのコードはまったく機能するのですか?因子列に基づいてどのようにサブセット化できますか?
`[`
はこれを許可することも何ですか? - 同じ値(、つまり、同じレベルの因子)のものが異なる扱いを受けるのはなぜですか?
答えをありがとう!なぜ私はこれを以前に気づかなかったのか分かりません。私は、最小限の例を構築するときに貧しい数字を選んだと思う。行番号と同じ値を選んではいけません。 ':-p'とにかく、ありがとう。 +1 –