2015-01-09 65 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,所以可以通過引用完成。