如何使用data.table的fread同时按列名与列索引选择列?
使用data.table的fread同时按列名和列索引选择列
要实现用fread同时按列名和列索引筛选列,你需要先把索引对应的列名提取出来,和指定列名合并成唯一的向量后,再传给select参数——因为fread的select不支持像dplyr那样直接混合列名与索引的语法。
解决方案代码示例
library(data.table) # 1. 快速获取文件的所有列名(仅读取表头,不加载数据) all_colnames <- fread("test.csv", nrows = 0)$colnames # 2. 定义你要选择的列名和列索引 chosen_names <- c("ID") chosen_indices <- c(2) # 3. 将列索引转换为对应列名,合并后去重 selected_cols <- unique(c(chosen_names, all_colnames[chosen_indices])) # 4. 读取文件并选择目标列 DT <- fread("test.csv", select = selected_cols)
为什么你之前的写法不行?
fread的select参数仅接受纯字符向量(列名)或纯整数向量(列索引),不支持c("ID") | c(2)这种混合语法。- 你尝试的
fread("test.csv")[c("ID") | c(2)]会先加载全部数据再筛选,效率远低于在读取阶段就过滤列的方式。
补充说明
如果你的文件表头结构固定,也可以直接手动把索引对应的列名写进去(比如这里索引2对应Code),直接用select = c("ID", "Code"),但上面的方法更通用,适合表头不固定的场景。
内容的提问来源于stack exchange,提问作者luchonacho
相关产品推荐
相关产品推荐

