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

如何用R将姓名-部门列表转换为列长度不一的表格?

解决方案

可以用tidyverse工具链完成这个自动化转换,步骤如下:

  1. 分组排序并添加行号
    先按部门分组,对每个组内的姓名按字母顺序排序,再为每组内的姓名分配行号,确保同一行号对应各部门的第N个姓名:
library(tidyverse)

df_processed <- df %>%
  group_by(DEPT) %>%
  arrange(NAME) %>%  # 按字母排序姓名
  mutate(row_id = row_number()) %>%  # 为每组内的姓名添加行号
  ungroup()
  1. 转换为宽格式表格
    使用pivot_wider将长格式转为宽格式,自动提取部门作为列名,空缺位置用NA填充:
df_table <- df_processed %>%
  pivot_wider(
    id_cols = row_id,
    names_from = DEPT,
    values_from = NAME,
    values_fill = NA  # 空缺位置填充NA
  ) %>%
  select(-row_id)  # 移除临时行号列
  1. (可选)调整列的顺序
    如果需要让列按部门名称的字母顺序排列,可添加这一步:
df_table <- df_table %>%
  select(sort(names(.)))

运行上述代码后,得到的df_table完全符合需求:各部门列内姓名按字母排序,空缺位置填充NA,且自动提取所有唯一部门作为列名,无需手动指定。

测试示例数据的输出结果:

# A tibble: 5 × 3
  CP     QP        Tox   
  <chr>  <chr>     <chr> 
1 Sophia Abdullah  Emma  
2 Matteo Isabella  Lea   
3 NA     Liam      Olivia
4 NA     Muhammed  NA    
5 NA     Noah      NA    

该方案适配数据量变化和部门变动的场景,只要维护好原始的姓名部门列表(比如从CSV读取),运行脚本就能自动生成目标表格,可直接用于RMarkdown幻灯片生成人员名单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:43:23