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

如何在R中按日期和地点生成姓名列的两两组合

在R中按日期和地点分组生成姓名两两组合列

直接用tidyverse工具链就能完成需求,核心是先拆分逗号分隔的姓名,再按分组生成两两组合,最后转成宽格式补全NA:

library(tidyverse)

# 原始数据
df <- tribble(
  ~date, ~place, ~names, 
  "2022-02-10", "a", "Luis Smith,Johan Devi,Lia Ivanov,Rui Kim",
  "2022-02-11", "b", "Luis Smith,Lia Ivanov,Rui Kim",
  "2022-02-12", "c", "Luis Smith,Johan Devi,Rui Kim", 
)

# 处理代码
result <- df %>%
  group_by(date, place, names) %>%
  # 拆分姓名为向量,生成两两组合并存为列表列
  mutate(pairs = list(
    combn(str_split(names, ",\\s*")[[1]], 2, paste, collapse = ", ")
  )) %>%
  # 展开列表列并记录组合索引
  unnest_longer(pairs, indices_to = "col_idx") %>%
  # 转宽格式,自动生成x1-xN列,不足补NA
  pivot_wider(
    names_from = col_idx,
    names_prefix = "x",
    values_from = pairs,
    values_fill = NA_character_
  ) %>%
  ungroup()

# 输出结果
print(result)

关键步骤说明

  • 拆分姓名列:str_split(names, ",\\s*")[[1]] 把逗号分隔的姓名拆成无多余空格的字符向量,这是你之前遗漏的核心步骤——直接用原names字符串喂给combn只会把整个字符串当成单个元素,无法生成有效组合;
  • 生成两两组合:combn(..., 2, paste, collapse = ", ") 对每个分组的姓名向量生成所有不重复的两两配对,同时用逗号加空格拼接成字符串;
  • 转宽格式补NA:pivot_wider 自动根据最大组合数生成x1到xN的列,分组内组合数不足的位置用NA填充,完全匹配你要的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:09:21