通过n个因子拆分R数据帧

时间:2015-12-17 19:11:44

标签: r split dataframe

我有一个数据框,我需要按因子组拆分成较小的数据帧,以便我可以对表格和数字进行分页。

例如,假设我想将diamonds数据集拆分为每个数据帧有2个切割级别的迷你数据帧。这意味着包含2个级别的2个数据帧的列表,1个具有1个级别的数据帧。

levels(diamonds$cut)
# "Fair"      "Good"      "Very Good" "Premium"   "Ideal" 

我正在尝试使用split()来完成此任务。 split(diamonds, diamonds$cut)按照因子将集合拆分为数据框,但是如何按2,3或n个级别将其拆分? split(data,rep(1:round(nrow(data)/10),each=10))之类的内容仅适用于每个因素有一行,但我使用“长”数据帧,因此因子沿数据帧的长度分布。

This问题很接近,但是使用了我没有的数字变量。

3 个答案:

答案 0 :(得分:2)

我们split'cut'变量的levels,其中包含使用gl创建的分组变量,然后使用list元素中的每个%in%元素对'diamond'进行子集化v1 <- levels(diamonds$cut) n <- 2 lapply(split(v1, as.numeric(gl(length(v1), n, length(v1)))), function(x) diamonds[diamonds$cut %in% x,])

{{1}}

答案 1 :(得分:0)

使用:

diamonds$splt <- c("B","A")[diamonds$cut %in% c("Very Good","Premium","Ideal") + 1L]

您创建了一个新变量,您可以在其中将数据集拆分为两个:

split(diamonds, diamonds$splt)

答案 2 :(得分:0)

简单的解决方案:

df_splt<-split(diamonds,ceiling(as.numeric(diamonds$cut)/2))

请注意,虽然每个data.frame都有空白级别。

 >table(df_splt[[1]]$cut)

 Fair      Good Very Good   Premium     Ideal 
 1610      4906         0         0         0