Cristobal Carvajal
Cristobal Carvajal

Reputation: 11

Repeat n times a subset and plot in R

first of all thanks to this forum because I've finded a lot of answers!! Now my time to ask for help. I can solve this.... function?, loop?... didn't find a good example

# from a data.frame = data
# A:F are name of columns

x<-unique(data$A) # in the example c('var1','var2','var3','var4')
y<-unique(data$B) # in the example c('varA','varB')
z<-unique(data$C) # in the example c('var1a','var2a')

# I NEED TO REPEAT THIS (based on x_y_z combinations)#
x_y_z<-subset(data,data$A==x & data$B==y & data$C==z)
plot_x_y<-qic(y=D
             ,n=E
             ,x=F  
             ,data=x_y_z
             ,chart = 'p')

The idea is to repeat the subsetting and make a plot for each x_y_z combination. The subset should have the name of the variables combinated separated by a '_'. I guess it should work like this:

var1_varA_var1a<-subset(data,data$A==var1 & data$B==varA & data$C==var1a) 
plot_var1_varA<-qic(y=D
                   ,n=E
                   ,x=F  
                   ,data=var1_varA_var1a
                   ,chart = 'p')

And obtain all this plots:

plot_var1_varA_var1a
plot_var1_varB_var1a
plot_var1_varA_var2a
plot_var1_varB_var2a
plot_var2_varA_var1a
plot_var2_varB_var1a
plot_var2_varA_var2a
plot_var2_varB_var2a
plot_var3_varA_var1a
plot_var3_varB_var1a
plot_var3_varA_var2a
plot_var3_varB_var2a
plot_var4_varA_var1a
plot_var4_varB_var1a
plot_var4_varA_var2a
plot_var4_varB_var2a

Sorry for the basic question, but I'm stuck on this.

Cristobal

Upvotes: 1

Views: 443

Answers (1)

Parfait
Parfait

Reputation: 107757

Consider by which slices like subset but allows dataframe operations in its FUN arg. And use a list of plots instead of many separately named plot objects.

plot_list <- by(data, data[, c("A","B","C")], FUN = function(df) {
     qic(y = D,n = E,x = F, data = df, chart = 'p')
})

Should you want to rename this list:

dfnames <- expand.grid(x,y,z)

listnames <- vapply(1:nrow(dfnames), function(i) 
  paste(dfnames$Var1[[i]], dfnames$Var2[[i]], dfnames$Var3[[i]], sep="_"), character(1))
#   [1] "var1_varA_var1a" "var2_varA_var1a" "var3_varA_var1a" "var4_varA_var1a" "var1_varB_var1a"
#   [6] "var2_varB_var1a" "var3_varB_var1a" "var4_varB_var1a" "var1_varA_var2a" "var2_varA_var2a"
#  [11] "var3_varA_var2a" "var4_varA_var2a" "var1_varB_var2a" "var2_varB_var2a" "var3_varB_var2a"
#  [16] "var4_varB_var2a"

# RENAME LIST ELEMENTS
plot_list <- setNames(plot_list, paste0("plot_", listnames))

plot_list$plot_var1_varA_var1a      # FIRST PLOT
plot_list$plot_var2_varA_var1a      # SECOND PLOT
...

Upvotes: 1

Related Questions