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

如何用R/dplyr合并两列并保留分类内字母序生成单列数据框?

使用dplyr实现城市与区域的合并排序需求

问题背景

现有如下数据框:

df <- data.frame(
  cities = c(
    rep("Atlanta", 3),
    rep("Seattle", 4),
    rep("Paris", 2)
  ),
  area = c(
    c("A", "C", "X"),
    c("B", "H", "I", "D"),
    c("Z", "F")
  )
)

需要生成一个单列数据框,满足以下要求:

  • 城市整体按字母顺序排列
  • 每个城市分类下先显示城市名称,再按字母顺序列出对应的area值
  • 最终合并为单列,期望输出如下:
data.frame(
  new_column = c(
    "Atlanta",
    "A",
    "C",
    "X",
    "Paris",
    "F",
    "Z",
    "Seattle",
    "B",
    "D",
    "H",
    "I"
  )
)

dplyr优雅实现方案

可以结合dplyr的分组、汇总功能,搭配tidyr的展开函数完成需求,代码如下:

library(dplyr)
library(tidyr)

result <- df %>%
  group_by(cities) %>%
  # 每个组内拼接城市名与排序后的area,存为列表
  summarise(new_column = list(c(first(cities), sort(area)))) %>%
  # 按城市字母顺序排序分组
  arrange(cities) %>%
  # 展开列表为单列行数据
  unnest(new_column) %>%
  # 转换为基础数据框(可选)
  as.data.frame()

print(result)

步骤说明

  • group_by(cities):按城市名称分组,确保后续操作以城市为单位
  • summarise(...):对每个城市组,先取城市名称(first(cities)避免重复取值),再将area按字母排序后拼接,用list()将每组内容打包为列表元素
  • arrange(cities):将所有城市组按字母顺序重新排列
  • unnest(new_column):把列表格式的列展开为单独的行,形成最终的单列结构
  • as.data.frame():如果需要将结果转为基础数据框格式,执行此步骤(默认unnest后为tibble格式,也可直接使用)

运行上述代码后,即可得到符合要求的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:50:25