-1

我正在为探索性分析做一些非常基本的绘图,并成功地创建了一个 for 循环来为我完成大部分工作。我有 12 年的数据、5 个不同的类别(Cat1-Cat5)和 3 个不同的变量(比如 X、Y、Z)。到目前为止,我所做的循环为我提供了每个变量的直方图(例如,第 1 年的 X - 第 12 年的 X)。

我以 2 种方式对数据进行了分区 - 按类别和按年份如下:

Cat.1<-subset(data,Category==1) #Similar code for categories 2-5
categories<-list(Cat.1,Cat.2,Cat.3,Cat.4,Cat.5)

Year.1<-subset(data,Year==1)
years<-list(Year.1,Year.2, ... , Year.12)

现在,通过这种方式对数据进行分区,我设置了循环:

for(i in (1:length(categories))
{
  store.data<-categories[[i]]
  hist(store.data$X)
}

我想做的是有一个处理3个变量的外部循环:

variables<-list(X,Y,Z)

for(j in (1:length(variables))
{
  #insert above for loop here
}

所需的输出将是每年和每个变量的所有直方图的输出。我意识到我可以在原始 for 循环中添加行:

 hist(store.data$Y)
 hist(store.data$Z)

但是,最终我将对数据进行分析(ANOVA、t 检验等),并且我计划进行相同的设置。通过让外部循环处理内部循环处理哪个变量,理论上我应该编写更少的代码。

4

1 回答 1

1

这个简短的解决方案为您提供直方图,但没有命名它们以告知您哪个直方图与哪个类别相关。直方图将由变量命名,生成直方图的顺序将与您的类别的数字顺序相对应。它看起来不像您在发布的代码中标记您是直方图,所以这对您来说可能不是问题。

category = rep(1:5,20)
X = rnorm(100)
Y = rexp(100)
Z = rgamma(100,5)

require(data.table)
DT = data.table(category, X, Y, Z)

DT[,lapply(.SD, hist), by=category]
于 2013-07-17T21:14:02.977 回答