2015-01-09 35 views
-1

我从Excel中读取数据文件导入到R的文件的格式,像这样一个data.table:与暧昧列名处理data.table

COL_1_STUFF COL_2_STUFF COL_3_STUFF 
ID EST MOE PCT EST MOE PCT EST MOE PCT 

也就是说,对于每个变量( COL s),有一个估计值,一个误差范围和给定的百分比。

麻烦的是由read.xlsx2,我使用导入像这样的文件,该文件创建:

data <- as.data.table(read.xlsx2(
    "file.xlsx", sheetIndex = 1L, colIndex = c(1L, 4L, 7L), startRow = 2L)) 

的问题是,read.xlsx2相同的列名分配给了一堆东西 - 进口看起来是这样的:

ID EST EST EST 

即使我设置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)] 

这令我奇怪的方式来处理这个问题;任何人都可以提出一个替代方法吗?

+0

也许你可以尝试将你的Excel文件转换为csv并使用data.table的fread来将数据读入R. – KFB

+1

听起来好像你正在处理多行标题。你想要什么样的输出? – A5C1D2H2I1M1N2O1R2T1

+0

@KFB让我想起了这些,但我想找到一个不涉及到的解决方案 - 对我来说不是这样,但我可以想象有人拥有大量像我一样格式化的文件,寻找一个程序化解决方案 – MichaelChirico

回答

1

一个完美的解决方案,这是覆盖更新前这一周增加了check.names参数data.table(和fread):

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

自动添加.1.2等方式重复列名。

感谢@DavidArenburg的原始FR #1027和@Arun的执行data.table;并没有太多的帮助我将它转换为setDT,所以可以通过引用完成。