2017-02-03 10 views
-1
library(dplyr) 
library(plyr) 

df = data.frame(x = sample(c("Large","Medium", "Small"), 10, replace = TRUE), y = sample(c("Yes","No"), 10, replace = TRUE), z = sample(c("High","Low"), 10, replace = TRUE)) 

df %>% 
count('x') %>% 
ggplot(aes(x,freq)) + 
geom_bar(stat = "identity") -> a 

df %>% 
count('y') %>% 
ggplot(aes(y,freq)) + 
geom_bar(stat = "identity") -> b 

df %>% 
count('z') %>% 
ggplot(aes(z,freq)) + 
geom_bar(stat = "identity") -> c 

grid.arrange(a,b,c, ncol=3, nrow =1) 

代わりに二回以上のコードを書くのは、私は下記のようにループを構築したい:forループを構築するには、count()コマンドでどのように変数名を使用できますか?

for (val in names(df)) { 
df %>% 
count(get(val)) %>% 
ggplot(aes(get(val),freq)) + 
geom_bar(stat = "identity") 
} 

私はエラーが発生します:「mutate_implでエラーが発生しました(.dataの、ドット):オブジェクト「X ' 見つかりません"。

+1

'%>%' 'パッケージであるdplyr' '数() '関数は、私も私の質問でこれを含まれているplyr' 'です。 –

答えて

1

実際にcountは必要ありません。statコールを使わずにgeom_bar()を正しく呼び出してプロットすることができます。これを関数にして(プログラムで使用しているので、aes_を気を付けて)、lapplyを使用してください。我々はまた、解決策を得るために、forループを使用することができます

plot_stuff <- function(x, val) { 

    x %>% 
    ggplot(aes_(x = as.name(val))) + 
    geom_bar() 

} 

plots <- lapply(names(df), plot_stuff, x = df) 

grid.arrange(grobs = plots, ncol = 3, nrow = 1) 

enter image description here

0

。コードは以下の通りです。しかし、Jakeが提供するソリューションが優れています。

df = data.frame(x = sample(c("Large","Medium", "Small"), 10, replace = TRUE), y = sample(c("Yes","No"), 10, replace = TRUE), z = sample(c("High","Low"), 10, replace = TRUE)) 

i <- c(0) 
for (val in names(df)){ 
i <- i+1 
assign(paste("bar",i,sep="_"), ggplot(df, aes_(as.name(val))) + geom_bar()) 
} 
grid.arrange(bar_1, bar_2, bar_3, ncol = 3, nrow = 1) 
``` 
関連する問題