reshape
パッケージはあなたの友人です、ここにあります。この場合、melt()
とuntable()
はデータを正規化するのに便利です。
例要約data.frameがdf
という変数である場合には、省略答えは:
# replace total n with number of failures
df$fail = df$n - df$success
df$n = NULL
# melt and untable the data.frame
df = melt(df)
df = untable(df, df$value)
# recode the results, e.g., here by creating a new data.frame
df = data.frame(
test = df$test,
group = df$group,
success = as.numeric(df$variable == "success")
)
これは非常に一般的な問題の良い例です。この考え方は、クロス集計の根底にあるデータのリストを逆算することです。クロス集計を考えると、バック計算されたデータのリストは各データに対して1つの行を持ち、各データの属性を含んでいます。 「データオタク」用語でHere is a post to the inverse of this question.
、これは第1正規形にまとめたデータを置くの質問です - それは誰にも役に立つ場合。 Google のデータ正規化を使用すると、さまざまな方法でクロス集計および分析が可能なアジャイルデータフレームを設計できます。具体的には
、ここで動作するようにmelt()
とuntable()
ために、生データは、fail
(失敗回数)よりもむしろ総n
を含めるビットを微調整する必要があるが、それは十分に単純である:
df$fail <- df$n - df$success
df$n <- NULL
test group success fail
1 A control 1 1
2 A treat 2 1
3 B control 3 2
4 B treat 1 2
ここでテーブルを「溶かす」ことができます。 melt()
は、クロス集計を作成するために使用された元のデータリストをバック計算することができます。この場合
df <- melt(df)
は、私たちは「成功」か「失敗」、そしてオリジナル
success
または
fail
列からデータムが含まれてい
value
という列のいずれかを含む
variable
と呼ばれる新しい列を取得します。
test group variable value
1 A control success 1
2 A treat success 2
3 B control success 3
4 B treat success 1
5 A control fail 1
6 A treat fail 1
7 B control fail 2
8 B treat fail 2
untable()
関数は数値「カウント」ベクトルの値に応じて、テーブルの各行を繰り返します。この場合、成功数を含み失敗するため、df$value
がカウントベクトルになります。
各データごとに1つのレコードが得られる
df <- untable(df, df$value)
、いずれかの「成功」か「失敗」:
test group variable value
1 A control success 1
2 A treat success 2
2.1 A treat success 2
3 B control success 3
3.1 B control success 3
3.2 B control success 3
4 B treat success 1
5 A control fail 1
6 A treat fail 1
7 B control fail 2
7.1 B control fail 2
8 B treat fail 2
8.1 B treat fail 2
はこれが解決策です。必要であれば、データは現在、1で「成功」を交換し、0を「失敗」するために再コードすることができます(と余分なvalue
とvariable
列を取り除く...)
df <- data.frame(
test = df$test,
group = df$group,
success = as.numeric(df$variable == "success")
)
これは、要求された解を返します行は異なる方法でソートされます。
test group success
1 A control 1
2 A treat 1
3 A treat 1
4 B control 1
5 B control 1
6 B control 1
7 B treat 1
8 A control 0
9 A treat 0
10 B control 0
11 B control 0
12 B treat 0
13 B treat 0
明らかに、data.frameは必要に応じて再ソートできます。 How to sort a data.frame in R.
関連度:[要約率の行を長いバイナリ応答の行にエレガントに変換しますか?](http://stackoverflow.com/questions/18791355/elegantly-convert-rate-summary-rows-into-long-binary-response -rows/18793811#18793811)。 – Henrik
最初のデータフレームで加重回帰を行う手法は便利ですが、他のタイプのモデルを作成したい場合は、フォーマットをどのように切り替えるのかと思っています。 – user3658457