plyr から来た dplyr を学習しています。xtabs の出力から (グループごとに) 列を (相互作用ごとに) 生成したいと考えています。
短い要約:私は得ています
A B
1 NA
NA 2
欲しかった時
A B
1 2
xtabs データは次のようになります。
> xtabs(data=data.frame(P=c(F,T,F,T,F),A=c(F,F,T,T,T)))
A
P FALSE TRUE
FALSE 1 2
TRUE 1 1
次のようdo(
に、データフレーム内のデータが必要になりました。
> xtabs(data=data.frame(P=c(F,T,F,T,F),A=c(F,F,T,T,T))) %>% as.data.frame
P A Freq
1 FALSE FALSE 1
2 TRUE FALSE 1
3 FALSE TRUE 2
4 TRUE TRUE 1
ここで、列がレベルの相互作用である単一行の出力が必要です。これが私が探しているものです:
FALSE_FALSE TRUE_TRUE FALSE_TRUE TRUE_FALSE
1 1 2 1
しかし、代わりに私は得る
> xtabs(data=data.frame(P=c(F,T,F,T,F),A=c(F,F,T,T,T))) %>%
as.data.frame %>%
unite(S,A,P) %>%
spread(S,Freq)
FALSE_FALSE FALSE_TRUE TRUE_FALSE TRUE_TRUE
1 1 NA NA NA
2 NA 1 NA NA
3 NA NA 2 NA
4 NA NA NA 1
私は明らかにここで何かを誤解しています。ここでreshape2のコードに相当するものを探しています(一貫性のためにmagrittrパイプを使用しています):
> xtabs(data=data.frame(P=c(F,T,F,T,F),A=c(F,F,T,T,T))) %>%
as.data.frame %>% # can be omitted. (safely??)
melt %>%
mutate(S=interaction(P,A),value=value) %>%
dcast(NA~S)
Using P, A as id variables
NA FALSE.FALSE TRUE.FALSE FALSE.TRUE TRUE.TRUE
1 NA 1 1 2 1
(この単純化された例にはグループ化変数がないため、ここでは NA が使用されていることに注意してください)
更新-興味深いことに、単一のグループ化列を追加するとこれが修正されるようです-なぜ、私に言わずにグループ化列を(おそらくrow_nameから)合成するのですか?
> xtabs(data=data.frame(h="foo",P=c(F,T,F,T,F),A=c(F,F,T,T,T))) %>%
as.data.frame %>%
unite(S,A,P) %>%
spread(S,Freq)
h FALSE_FALSE FALSE_TRUE TRUE_FALSE TRUE_TRUE
1 foo 1 1 2 1
これは部分的な解決策のようです。