我有一个数据框,我需要按因子组拆分成较小的数据帧,以便我可以对表格和数字进行分页。
例如,假设我想将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问题很接近,但是使用了我没有的数字变量。
答案 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