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

如何用R或Tidyverse实现两个DataFrame的交叉连接扩展?

在R/Tidyverse中实现房间号与日期的全组合

当然可以轻松实现,用Tidyverse里tidyr包的函数就能快速生成两个数据框的笛卡尔积(即每个房间号对应所有日期的组合),以下是具体实现方法:

1. 准备示例数据

先创建两个示例数据框,模拟你的房间号和日期数据:

library(tidyverse)

# 房间号数据框
room_df <- tibble(room_number = c("101", "102", "103"))

# 日期数据框
date_df <- tibble(date = seq(as.Date("2024-01-01"), as.Date("2024-01-03"), by = "day"))

2. 生成全组合

根据你的需求选择以下两种函数:

保留原始重复项:expand_grid()

如果你的原始数据中存在重复的房间号或日期,且需要保留这些重复项对应的组合,用expand_grid():

full_combo <- expand_grid(room_df, date_df)

生成的结果示例:

# A tibble: 9 × 2
  room_number date      
  <chr>       <date>    
1 101         2024-01-01
2 101         2024-01-02
3 101         2024-01-03
4 102         2024-01-01
5 102         2024-01-02
6 102         2024-01-03
7 103         2024-01-01
8 103         2024-01-02
9 103         2024-01-03

自动去重后组合:crossing()

如果需要先对房间号和日期去重,再生成无冗余的组合,用crossing():

distinct_combo <- crossing(room_df, date_df)

这个函数会先移除每个数据框中的重复行,再生成笛卡尔积,适合需要避免重复组合的场景。

3. 基础R实现(无需Tidyverse)

如果不用Tidyverse,基础R的expand.grid()也能实现:

base_combo <- expand.grid(room_number = room_df$room_number, date = date_df$date)
# 可选:转换为更易用的tibble格式
base_combo <- as_tibble(base_combo)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:45:38