重复n次子集并在R中绘图

时间:2017-07-26 02:32:25

标签: r function loops plot repeat

首先感谢这个论坛,因为我已经找到了很多答案! 现在我的时间寻求帮助。 我可以解决这个....功能?,循环?...没有找到一个好的例子

# 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')

我们的想法是重复子集并为每个x_y_z组合制作一个图。子集应该具有由&#39; _&#39;分隔的组合变量的名称。 我想它应该像这样工作:

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')

获得所有这些情节:

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

对不起基本问题,但是我坚持这个。

瓦尔

1 个答案:

答案 0 :(得分:1)

考虑by哪些切片如subset,但允许在其FUN arg中进行数据框操作。并使用一个绘图列表而不是许多单独命名的绘图对象。

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

是否要重命名此列表:

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
...