「リード」変数に従って変数を分離したい。次の場合は x3:
set.seed(2)
df = data.frame(x1 = sample(4), x2 = sample(4), x3 = sample(letters[1:2], size = 4, replace = TRUE))
df
# x1 x2 x3
# 1 1 4 a
# 2 3 3 b
# 3 2 1 b
# 4 4 2 a
# Desired output
# x3 x1.a x2.a x1.b x2.b
# a 1 4 NA NA
# b NA NA 3 3
# b NA NA 2 1
# a 4 2 NA NA
私はどういうわけかこれを達成できると感じていreshape2::dcast()
ますが、合計で2つの変数に対してしか機能させることができませんでした:
reshape2::dcast(df[,2:3], seq_along(x3) ~ x3, value.var = "x2")[, -1]
# a b
# 1 2 NA
# 2 NA 1
# 3 NA 3
# 4 4 NA
しかし、これは完全な悪用かもしれませんdcast
。分割とマージを行わずに、この問題に対するエレガントな解決策はありdf
ますか?
編集:これを行うのは恐ろしい考えであり、おそらくそのようなことをすべきではないという人もいます。これがいつ意味を持つのかを詳しく説明しましょう。
Imaginex3
は、特定のアルゴリズムのスイッチです。この場合a
、 andb
がオプションです。さらにx1
、 とx2
は、両方のアルゴリズムが取ることができるパラメーターです。残念ながら、両方のアルゴリズムは と の同じパラメーター設定でまったく異なる動作をするためx1
、x2
相関関係がないことを考慮して、それらを別個の機能として扱うことは理にかなっています。