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