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

R中如何基于日内时间将单个dataframe拆分为两个独立数据集

tidyverse 实现方案

核心逻辑是按年月日分组后对时间排序,给组内行打上序号后拆分:

library(tidyverse)
library(lubridate)

# 构造示例数据
df <- structure(list(id = 1:6, date = structure(c(1426353511, 1426353536, 
1427390312, 1427390336, 1428427112, 1428427137), tzone = "UTC", class = c("POSIXct", 
"POSIXt"))), row.names = c(NA, -6L), class = c("tbl_df", "tbl", 
"data.frame"))

# 数据处理
df_processed <- df %>%
  group_by(date_only = as_date(date)) %>% # 提取年月日作为分组依据
  arrange(date, .by_group = TRUE) %>% # 组内按时间升序排列
  mutate(time_rank = row_number()) %>% # 组内生成时间先后序号
  ungroup()

# 拆分得到结果
df1 <- df_processed %>% filter(time_rank == 1) %>% select(id, date)
df2 <- df_processed %>% filter(time_rank == 2) %>% select(id, date)

如果你的场景中单日可能存在多于2条数据,调整filter的序号筛选规则即可适配。


base R 实现方案

逻辑和tidyverse版本一致,用base原生函数实现:

# 构造示例数据
df <- structure(list(id = 1:6, date = structure(c(1426353511, 1426353536, 
1427390312, 1427390336, 1428427112, 1428427137), tzone = "UTC", class = c("POSIXct", 
"POSIXt"))), row.names = c(NA, -6L), class = "data.frame")

# 数据处理
df$date_only <- as.Date(df$date) # 提取年月日分组标识
df_sorted <- df[order(df$date_only, df$date), ] # 按日期先后排序
df_split <- split(df_sorted, df_sorted$date_only) # 按年月日拆分分组

# 提取每组的第1、2行合并得到结果
df1 <- do.call(rbind, lapply(df_split, function(x) x[1, c("id", "date")]))
df2 <- do.call(rbind, lapply(df_split, function(x) x[2, c("id", "date")]))

# 重置行名(可选)
rownames(df1) <- NULL
rownames(df2) <- NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:06