R 处理data.table中不明确的列名

R 处理data.table中不明确的列名,r,data.table,heading,R,Data.table,Heading,我正在将Excel文件中的数据读取到R中的data.table中。该文件的格式如下: COL_1_STUFF COL_2_STUFF COL_3_STUFF ID EST MOE PCT EST MOE PCT EST MOE PCT 也就是说,对于每个变量(COLs),都有一个估计值、一个误差范围和一个给定的百分比 问题是由read.xlsx2造成的,我正在使用它导入文件,如下所示: data <- as.data.table(read.xlsx2( "file.xlsx",

我正在将Excel文件中的数据读取到R中的data.table中。该文件的格式如下:

   COL_1_STUFF COL_2_STUFF COL_3_STUFF
ID EST MOE PCT EST MOE PCT EST MOE PCT
也就是说,对于每个变量(COLs),都有一个估计值、一个误差范围和一个给定的百分比

问题是由
read.xlsx2
造成的,我正在使用它导入文件,如下所示:

data <- as.data.table(read.xlsx2(
  "file.xlsx", sheetIndex = 1L, colIndex = c(1L, 4L, 7L), startRow = 2L))
即使我设置了
header=FALSE
,我也很容易得到如下结果

X1 X2 X2 X2
为了避免这种情况,我在导入之后执行了以下操作:

data[ , c("col1_est", "EST") := .(EST, NULL)]
data[ , c("col2_est", "EST") := .(EST, NULL)]
data[ , c("col3_est", "EST") := .(EST, NULL)]

我觉得这是一种处理问题的奇怪方式;有人能推荐一种替代方法吗?

这可以通过
fread
check.names
参数、
data.table
setDT
来完成:

DT <- read.xlsx2(
  "file.xlsx", sheetIndex = 1L, colIndex = c(1L, 4L, 7L), startRow = 2L)
)
setDT(DT, check.names = TRUE)

DT可能是您可以尝试将Excel文件转换为csv,并使用data.table的
fread
将数据读入R。听起来您正在处理多行标题。你希望输出是什么样子?@KFB我想到了,但我想找到一个不涉及这个问题的解决方案——我不是这样的,但我可以想象有人拥有大量像我一样格式的文件,正在寻找一个编程solution@AnandaMahto是的,这就是我要找的词汇!只要我能够成功地导入到一个数据帧/数据表对象,而不必含糊不清地命名列,我就可以在R中处理其余的清理/操作。
DT <- read.xlsx2(
  "file.xlsx", sheetIndex = 1L, colIndex = c(1L, 4L, 7L), startRow = 2L)
)
setDT(DT, check.names = TRUE)