如何在R中将Excel中逗号分隔的字段值转换为目标表格?
解决方法
首先,问题出在读取Excel文件时的列名处理上——你的Excel里第一行其实是数据(字段名+对应的值串),而不是表头,直接用read_excel()会把第一行当成列名,导致结构混乱。我们分两步处理:先正确读取数据,再转换为目标格式。
步骤1:正确读取Excel数据
读取时指定col_names = FALSE,让R不要把第一行当作列名,而是用默认的X1、X2作为列名:
library(readxl) # 读取文件,不使用第一行作为列名 df <- read_excel("data.xlsx", col_names = FALSE)
这时候数据框的结构会是:
| X1 | X2 |
|---|---|
| field 1 | 1,3,4,5,7 |
| field 2 | 2,4,5,7,8 |
步骤2:转换为目标表格格式
接下来把逗号分隔的字符串拆分成单独数值,再组合成对应列:
library(stringr) # 提取字段名作为新表格的列名 new_colnames <- df$X1 # 把每个逗号分隔的字符串拆分成数值向量 split_values <- strsplit(df$X2, ",") %>% lapply(as.numeric) # 组合向量为数据框并设置列名 result <- as.data.frame(do.call(cbind, split_values)) colnames(result) <- new_colnames
运行完这段代码后,result就是你想要的格式:
| field 1 | field 2 |
|---|---|
| 1 | 2 |
| 3 | 4 |
| 4 | 5 |
| 5 | 7 |
| 7 | 8 |
额外说明:如果值的长度不一致怎么办?
如果两个字段对应的数值数量不一样,上面的cbind会报错。这时候可以用purrr包的map_dfc自动填充缺失值为NA:
library(purrr) result <- map_dfc(split_values, ~.) %>% setNames(new_colnames)
比如field 1是1,3,4,field 2是2,4,5,7,结果会是:
| field 1 | field 2 |
|---|---|
| 1 | 2 |
| 3 | 4 |
| 4 | 5 |
| NA | 7 |
内容的提问来源于stack exchange,提问作者eliad
相关产品推荐
相关产品推荐

