我使用read_excel
來獲得速度和簡單性來導入Excel文件。正在刪除所有具有名稱的列上的列
不幸的是,目前還沒有能力排除從數據集中不需要的選定列;爲了節省工作量,我使用col_names
參數命名"x"
這樣的列,這比試圖跟蹤x1
,x2
等更容易。
然後我想在飛行中排除這些列儘可能地避免複製的一個額外的步驟,所以在僞代碼:
read_excel("data.xlsx", col_names = c("x", "keep", "x"))[ , !"x"]
我們可以使用附帶readxl
包樣本數據集插圖:
library(readxl)
DF <- read_excel(system.file("extdata/datasets.xlsx", package = "readxl"),
col_names = c("x", "x", "length", "width", "x"), skip = 1L)
我見過的工作,不上的蒼蠅,如正好工作,方法具有存儲DF
,我們現在可以這樣做:
DF <- DF[ , -grep("^x$", names(DF))]
這可行,但需要複製DF
存儲它,然後覆蓋它;我寧願刪除與read_excel
相同的命令中的列,以正確地分配DF
從頭開始。
其他類似的方法需要聲明的臨時變量,我寧願避免可能的話,例如,
col_names <- c("x", "x", "length", "width", "x")
DF <- read_excel(system.file("extdata/datasets.xlsx", package = "readxl"),
col_names = col_names, skip = 1L)[ , -grep("^x$", col_names)]
有沒有辦法砍掉這些列,而無需創建不必要的臨時變量?
(我都可以轉換成data.table
,但我想知道如果有一種方法可以這樣做沒有data.table
)
你打算使用'dplyr'嗎?你可以將它傳入'select()'而不必首先顯式創建一個變量。 (當然,無論你是否命名它,完整的data.frame仍然存在)。如果唯一的問題是額外的變量,只需創建你自己的函數dropXcolumns()或其他東西。 – MrFlick
關於'需要通過存儲DF來複制DF':我想即使將它製作成一行,也是可以複製的,所以我認爲你是沒有問題的。避免複製的唯一方法是如果'read_excel'明確允許它(類似於'data.table :: fread'的'select'參數)。 – nicola
'XLConnnect :: readWorksheet'(雖然你可能想要'readWorksheetFromFile',但它有更好的文檔)有列的'keep'和'drop'參數。不過,它是基於Java的,所以安裝比平時稍微複雜一些。 – alistaire