如何从R中的每个类别获取x行?

时间:2015-05-27 15:08:23

标签: r

我有一个包含很多行的矩阵,让我们说每个类别超过5000行,我想从每个类别获得4500行。怎么在R?

我知道有独特之处,但每个类别只需要一个元素,但每个类别需要N个元素。

这是我的数据:

    cat    f1    f2    f3
1   a      15    20    sdr
2   b      8     6     zrf
3   a      54    6     sf
4   c      32    8     azr
5   b      65    98    arfg
....

1 个答案:

答案 0 :(得分:4)

一种“强力”方法是按组拆分数据,然后简单地取SELECT *, customer_email, SUM(qty_invoiced) AS total_cases_invoiced FROM mg_sales_flat_order_item JOIN mg_sales_flat_order ON mg_sales_flat_order.entity_id = mg_sales_flat_order_item.order_id WHERE (mg_sales_flat_order_item.sku LIKE '%A' OR mg_sales_flat_order_item.sku LIKE '%F' OR mg_sales_flat_order_item.sku LIKE '%B' OR mg_sales_flat_order_item.sku LIKE '%C' OR mg_sales_flat_order_item.sku LIKE '%FP' OR mg_sales_flat_order_item.sku LIKE '%AP') AND row_total != 0 GROUP BY (order_id,customer_email) HAVING SUM(qty_invoiced) >= 4 ORDER BY customer_email DESC head行。然后只需将它们全部绑定到新的N即可。这是'split-apply-combine'的精髓。

data.frame

如果您的数据位于df <- data.frame(group=rep(c("A","B"), each=10), var=rnorm(20)) # Number of Rows N <- 5 # the split, apply(i.e. head), combine approach do.call("rbind", lapply(split(df, f=df$group), function(x) head(x, n=N))) ,其中的列包含某种唯一的组标识符,并且您直接调用matrix,则相同的方法也可以使用。它仍然会将矩阵拆分为“子”矩阵列表。

split.data.frame

修改

根据以下@akrun的建议,如果您的对象是mat <- matrix(c(rep(c(0,1), each=10), rnorm(20)),20,2) do.call("rbind", lapply(split.data.frame(mat, f=mat[,1]), function(x) head(x, n=N)))

,您还可以使用dplyr
data.frame