如何将含分类字符列的样本表格转换为仅含整数且无数据丢失的表格
问题原因
你之前的操作存在两个明确问题:
lapply(data, as.integer)会遍历数据框的所有列执行整数转换,字符串类型的taxonomy列无法直接转换为整数,因此全部返回NAlapply的默认返回值为列表结构,需要额外转换才能保持数据框的表格结构
解决方案
根据你的需求分两种场景处理:
场景1:保留taxonomy列的物种名称,仅转换样本存在/缺失列为整数
这是绝大多数分析场景的需求,物种名用于后续结果标识,仅数值列需要转为整数类型:
- 基础R实现:
# 按列名排除taxonomy列转换,适配taxonomy列位置变动的情况 data[, !names(data) %in% "taxonomy"] <- lapply(data[, !names(data) %in% "taxonomy"], as.integer) # 若taxonomy固定为第一列,也可以按索引转换 data[, 2:ncol(data)] <- lapply(data[, 2:ncol(data)], as.integer)
- tidyverse(dplyr)实现,写法更简洁:
library(dplyr) data <- data %>% mutate(across(-taxonomy, as.integer))
转换完成后可执行str(data)查看各列类型,确认taxonomy列为字符型、所有样本列为整数型即可。
场景2:要求所有列(含taxonomy)全部为整数
如果分析要求整张表所有条目都是整数,可以将taxonomy列的物种名转为整数编码,每个物种对应唯一整数ID:
# 先转因子再转整数生成物种编码 data$taxonomy <- as.integer(as.factor(data$taxonomy)) # 再按场景1的方法转换样本列即可
物种与整数的对应关系可通过levels(as.factor(原数据$taxonomy))查询,顺序与整数编码一一对应。
内容的提问来源于stack exchange,提问作者iiaawaak
相关产品推荐
相关产品推荐

