Я пытаюсь быстро сгенерировать несколько ggplot2
графиков из таблиц сопряженности, используя цикл for
в R. Каждая переменная (R1...R7
) сегментируется одной переменной (segment_r
).
Я написал следующий цикл, но продолжаю получать ошибки.
question_names<-paste("R",1:7,sep='') # Create list with question names
attach(df)
for (i in length(question_names)) {
question_names[i]<-factor(question_names[i])
means<-prop.table(table(get(question_names[i]),segment_r),2)*100
means.long<-melt(means,id.vars="segment_r")
p<-ggplot(means.long,aes(x=Var1,y=value,fill=factor(Var2)))+
geom_bar(stat="identity",position="dodge")+coord_flip()+
scale_fill_discrete(name="Segment",
breaks=c(1:4),
labels=c(1:4))+
xlab("")+ylab("Mean Percentage")
p <- p + facet_wrap( ~ Var2, ncol=4)
p
}
detach(df)
Я пытался включить get
в table
, что приводит к ошибке: Error in get(question_names[i]) : object '1' not found
).Однако пропуск get
также не работает: Error in table(question_names[i], segment_r) : all arguments must have the same length
.
Мысли?Я также открыт для решения, которое генерирует несколько графиков без использования loop
- здесь скорость.
Для запроса, примеры данных ниже:
df <- read.csv(text="R1, R2, R3, R4, R5, R6, R7, segment_r
Apples, Fruit salad, Pasta, Mexican, Apples, Cheese, Salad, Segment 1
Apples, Fruit salad, Pasta, Mexican, Apples, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Mexican, Oranges, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Mexican, Oranges, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Thai, Oranges, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Thai, Oranges, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Thai, Oranges, Cheese, Salad, Segment 2
Oranges, Ice cream, Pasta, Thai, Oranges, Milk, Salad, Segment 2
Bananas, Ice cream, Pasta, Thai, Bananas, Milk, Salad, Segment 2
Bananas, Ice cream, Pasta, Chinese, Bananas, Milk, Salad, Segment 2
Bananas, Ice cream, Pasta, Chinese, Bananas, Milk, Salad, Segment 2
Bananas, Pie, Pasta, Chinese, Bananas, Milk, Side, Segment 2
Bananas, Pie, Pasta, Chinese, Bananas, Milk, Side, Segment 2
Bananas, Pie, Pizza, Chinese, Bananas, Milk, Side, Segment 3
Bananas, Pie, Pizza, Chinese, Bananas, Milk, Side, Segment 3
Apples, Fruit salad, Pasta, Mexican, Apples, Milk, Side, Segment 4
Apples, Fruit salad, Pasta, Mexican, Apples, Milk, Side, Segment 4
Oranges, Fruit salad, Pasta, Mexican, Oranges, Milk, Side, Segment 4
Oranges, Fruit salad, Pasta, Mexican, Oranges, None, Side, Segment 4
Oranges, Fruit salad, Pasta, Thai, Oranges, None, Side, Segment 1
Oranges, Fruit salad, Pasta, Thai, Oranges, None, Side, Segment 1
Oranges, Fruit salad ,Pasta, Thai, Oranges, None, Side, Segment 2
Oranges, Ice cream, Pasta, Thai, Oranges, None, Side, Segment 2
Bananas, Ice cream, Pasta, Thai, Bananas, None, Side, Segment 2
Bananas, Ice cream, Pasta, Chinese, Bananas, None, Fries, Segment 2
Bananas, Ice cream, Pasta, Chinese, Bananas, None, Fries, Segment 2
Bananas, Pie, Pasta, Chinese, Bananas, None, Fries, Segment 2
Bananas, Pie, Pasta, Chinese, Bananas, None, Fries, Segment 2
Bananas, Pie, Pizza, Chinese, Bananas, None, Fries, Segment 3
Bananas, Pie, Pizza, Chinese, Bananas, None, Fries, Segment 3")