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

如何在R中将逗号分隔的单元格内容拆分为多列生成宽格式数据

实现方法

方法1:使用tidyverse包(推荐,代码简洁易读)

首先加载所需包:

library(tidyverse)

执行如下转换代码即可得到目标结果:

df.wide <- df %>%
  # 拆分逗号分隔的grades列为长数据,自动去除选项前后空格
  separate_rows(grades, sep = ",\\s*") %>%
  # 标记选中的选项为1
  mutate(value = 1) %>%
  # 转换为宽表,未匹配的位置填充为0,统一列名格式
  pivot_wider(names_from = grades, 
              values_from = value,
              values_fill = 0,
              names_prefix = "grade_",
              names_transform = tolower)

运行后输出的df.wide和你给出的预期结构完全一致。

方法2:base R实现(无需安装额外包)

# 提取所有可选的年级选项
grade_items <- unique(trimws(unlist(strsplit(df$grades, ","))))
# 按规则排序选项
grade_items <- sort(grade_items)
# 生成每行的选中标记矩阵
grade_mat <- t(sapply(strsplit(df$grades, ","), function(x) {
  as.integer(grade_items %in% trimws(x))
}))
# 合并数据并修改列名
df.wide <- cbind(df["teacher"], grade_mat)
colnames(df.wide)[-1] <- paste0("grade_", tolower(grade_items))

两种方法都可以得到你需要的宽表结果,可根据使用场景选择。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:09:02