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

使用Dplyr获取每行数据的最小值与最大值的实现流程

使用dplyr为每行数据添加最小值与最大值

看起来你已经构造了一个包含id、类型和收集日期的数据集,想要用dplyr来获取每行对应的最小值和最大值。这里分两种常见场景来帮你实现:


场景1:按分组计算每组的最小/最大值(最常见需求)

如果你的需求是按某个或某些维度分组(比如id + type),然后为每行添加该组的最小/最大收集日期,可以用dplyr的分组+窗口函数来实现:

代码示例

library(dplyr)

# 你的数据集构造代码
id <- c("1", "2", "3", "1", "2", "3", "1", "2", "3", "1", "2", "3", "1", "2", "3")
type <- c("A", "A", "B", "A", "B", "B", "B", "B", "A", "B", "B", "A", "A", "B", "A")
date_collected <- as.Date(c("2018-01-01", "2018-01-01", "2018-01-01", "2018-01-02", "2018-01-02", "2018-01-02", "2018-01-03", "2018-01-03", "2018-01-03", "2018-01-04", "2018-01-04", "2018-01-04", "2018-01-05", "2018-01-05", "2018-01-05"))
df <- data.frame(id, type, date_collected)

# 按id和type分组,计算每组的最小、最大日期,并添加到每行
df_with_minmax <- df %>%
  group_by(id, type) %>%
  mutate(
    min_date = min(date_collected),
    max_date = max(date_collected)
  ) %>%
  ungroup()

# 查看结果
print(df_with_minmax)

说明

  • group_by(id, type):指定分组维度,这里按id和类型组合分组
  • mutate():在原数据基础上新增列,min(date_collected)和max(date_collected)会自动计算每组的最小/最大日期
  • ungroup():取消分组,避免后续操作受分组影响

场景2:计算每行自身各列的最小/最大值(针对可比较类型)

如果你的需求是对每行的所有可比较列(比如日期)计算最小和最大值(注:字符列的min/max是按字母顺序排序,意义不大),可以用rowwise()结合c_across()来实现:

代码示例

df_row_minmax <- df %>%
  rowwise() %>%
  mutate(
    # 只针对日期列计算行内min/max
    row_min_date = min(c_across(date_collected)),
    row_max_date = max(c_across(date_collected)),
    # 如果要包含字符列的min/max(按字母顺序)
    row_min_char = min(c_across(c(id, type))),
    row_max_char = max(c_across(c(id, type)))
  ) %>%
  ungroup()

print(df_row_minmax)

说明

  • rowwise():将数据按行分组,让后续的聚合函数(min/max)作用于每行
  • c_across():选中要计算的列,这里可以指定单个列或列范围
  • 注意:因为每行只有一个日期值,所以row_min_date和row_max_date会等于该行的date_collected;字符列的min/max是按ASCII顺序比较的(比如"1"<"2"<"3","A"<"B")

如果你的需求和以上两种场景不同,可以补充说明具体的计算维度,我再帮你调整!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:57:41