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

如何在R中根据医师姓名为每行分配递增编号以实现长表转宽

解决方案:为医师教育记录分配行号并转换为宽表

一、分配RowAssign列

你的循环函数存在语法错误(if语句格式、变量引用逻辑有误),在R中处理这种分组编号需求,更高效简洁的方式是使用以下两种方法:

方法1:使用tidyverse(dplyr)

# 加载dplyr包
library(dplyr)

# 假设你的数据框名为df,包含"Practitioner Name"列
df <- df %>%
  group_by(`Practitioner Name`) %>%
  mutate(RowAssign = row_number()) %>%
  ungroup()
  • group_by()按医师姓名分组
  • row_number()在每个分组内生成从1开始递增的序号,不同分组自动重置为1

方法2:使用Base R

如果不想加载额外包,可使用ave函数:

# 为数据框添加RowAssign列
df$RowAssign <- ave(rep(1, nrow(df)), df$`Practitioner Name`, FUN = seq_along)
  • ave()按医师姓名分组,seq_along为每个分组生成连续序号

二、转换为宽表

完成行号分配后,可使用tidyr包的pivot_wider函数将长表转为宽表,让每位医师的所有教育记录位于同一行:

# 加载tidyr包
library(tidyr)

# 转换为宽表,替换为你的实际教育字段(如学校、年份等)
wide_df <- df %>%
  pivot_wider(
    id_cols = `Practitioner Name`,  # 作为唯一标识的列
    names_from = RowAssign,         # 用于区分同一医师不同记录的列
    values_from = c(EducationSchool, EducationYear),  # 需要展开的教育相关列
    names_glue = "{.value}_{RowAssign}"  # 生成带序号的列名,如EducationSchool_1
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:54:24