2017-02-25 9 views
2
types = c("A", "B", "C") 
df = data.frame(n = rnorm(100), type=sample(types, 100, replace = TRUE)) 
ggplot(data=df, aes(n)) + geom_histogram() + facet_grid(~type) 

上記は私が通常ファセットを使用する方法です。 ggplot2でインジケータ変数を使用することはできますか?

df = data.frame(n = rnorm(100), A=rbinom(100, 1, .5), B=rbinom(100, 1, .5), C=rbinom(100, 1, .5)) 

今私の前の例から「タイプ」変数は相互に排他的ではありません。代わりにカテゴリ変数の私のようなインジケータ変数である列のセットを持っている場合しかし、私はそれを使用することができます。観察は例えば「AとB」または「AとBとC」とすることができる。しかし、私はまだA、B、またはCの存在を持つ任意の観測について個別のヒストグラムが好きですか?

答えて

2

tidyrでデータを再構成し、より多くのカテゴリのデータが複製されるようにします。 filterを使用して不要なケースを削除します。

df <- data.frame(
    n = rnorm(100), 
    A = rbinom(100, 1, .5), 
    B = rbinom(100, 1, .5), 
    C = rbinom(100, 1, .5) 
) 

library("tidyr") 
library("dplyr") 
library("ggplot2") 

df %>% gather(key = "type", value = "value", -n) %>% 
    filter(value == 1) %>% 
    ggplot(aes(x = n)) + 
    geom_histogram() + 
    facet_wrap(~type) 
1

私はいつもgatherを軽蔑してきたので、私は別の方法とdata.tableファンのための1つを追加します。

library(data.table) 
DT <- melt(setDT(df), id= "n", variable = "type")[value > 0] 
ggplot(DT,aes(n)) + geom_histogram() + facet_grid(~type) 

#tidyland 
library(reshape2) 
library(dplyr) 
library(ggplot2) 
df %>% 
    melt(id = "n", variable = "type") %>% 
    filter(value > 0) %>% 
    ggplot(aes(n)) + geom_histogram() + facet_grid(~type) 
関連する問題