You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取DataFrame中shoe_brand与color分组的前两条交易记录

解决方案

方法1:使用dplyr包(tidyverse生态,代码简洁易读)

适用于已经习惯tidyverse语法的场景,可灵活控制排序逻辑,确保取到的是你需要的「前两条」(比如按交易时间最早排序):

library(dplyr)

result <- transactions %>%
  # 按品牌、颜色分组
  group_by(shoe_brand, color) %>%
  # 按交易时间升序排序,.by_group = TRUE 保证排序在分组内生效
  arrange(transaction_date, .by_group = TRUE) %>%
  # 取每个分组的前2条记录
  slice_head(n = 2) %>%
  # 解除分组,避免后续操作受分组逻辑影响
  ungroup()

如果你不需要调整排序,直接按原表的顺序取前2条,去掉arrange行即可。

方法2:Base R原生实现

无需安装任何第三方包,直接用R基础函数实现:

# 先按品牌、颜色、交易时间排序(如果需要按时间取最早的前2条,不需要排序可以跳过这一步)
trans_sorted <- transactions[order(transactions$shoe_brand, transactions$color, transactions$transaction_date), ]

# 为每个品牌+颜色分组生成组内行号
trans_sorted$group_row <- ave(rep(1, nrow(trans_sorted)), 
                              trans_sorted$shoe_brand, 
                              trans_sorted$color, 
                              FUN = seq_along)

# 筛选组内行号小于等于2的记录,删除临时行号列
result <- trans_sorted[trans_sorted$group_row <= 2, ]
result$group_row <- NULL

原方案问题说明

之前使用match和unique只能提取到第一条记录,是因为这两个函数的默认逻辑仅返回每个分组的第一个匹配位置,无法批量生成每个分组内的连续行号做范围筛选,因此无法实现取前N条的需求。

内容的提问来源于stack exchange,提问作者Nick Ng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:51:02