7

有没有办法一举将单个因素的所有级别子集化?

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

4

2 回答 2

13

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

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

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

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

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

group1<-subsets[[1]]
group2<-subsets[[2]]
...
于 2013-07-29T02:14:09.857 回答
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) {
      ...
   }
}
于 2013-07-28T11:54:46.483 回答