如何在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
相关产品推荐
相关产品推荐

