子集单个因子的所有级别

时间:2013-07-28 05:59:06

标签: r

有没有办法在一次干净的猛扑中将所有级别的单个因子分组?

案例:假设您有一个数据框,其中一列是一个因子(数据$因子),并且您想要创建仅包含一个因子级别的子集数据框。当通过编写单独的子集命令存在少量因素时,这很容易做到。但是,如果你有很多级别(例如50级以上)怎么办?在这种情况下是否有命令或巧妙的方法来创建所有子集而无需编写50多个子集命令?

2 个答案:

答案 0 :(得分:13)

无需创建循环,SPLIT函数是解决此问题的关键。

假设您想要子集(或子组)的因子列位于数据框“data”的“factor”列中,请执行以下操作:

subsets<-split(data, data$factor, drop=TRUE)

这将根据因子值创建子集列表。该列表的长度与因子数相同。

如果您需要将每个子集放在单独的数据框中,可以通过执行以下操作来访问它们:

group1<-subsets[[1]]
group2<-subsets[[2]]
...

答案 1 :(得分:0)

您可以按如下方式在请求的因子值上创建循环:

vals <- sort (unique (data[[factor]]))
for (i in 1:length(vals)) {
   subset <- (data[[factor]]==vals[i])
   n <- length (data[[factor]][(subset)])
   if (n >= min.n) {
      ...
   }
}