0

read_excelExcelファイルをインポートするために、スピードとシンプルさのために使用しています。

残念ながら、データ セットから不要な列を選択して除外する機能はまだありません。労力を節約するために、このような列"x"には引数を付けて名前を付けています。これは、、、などcol_namesを追跡しようとするよりも簡単です。x1x2

次に、可能であればその場でそのような列を除外して、コピーの余分なステップを回避したいので、疑似コードで:

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これは機能しますが、保存してから上書きすることでコピーを作成する必要があります。ab initioを適切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)

4

2 に答える 2

2

コピーを避ける簡単な方法がわかりません。しかし、パイピングを使用してワンライナーを実現でき、一時変数は必要ありません。例えば:

library(magrittr)
read_excel(system.file("extdata/datasets.xlsx", package = "readxl"), 
           col_names = c("x", "x", "length", "width", "x"), skip = 1L) %>% 
  extract(, -grep("^x$", names(.))) -> 
  DF
于 2016-07-15T21:09:39.933 に答える
2

少し隠されていますが、実際にはこれを行う方法がありreadxl::read_excel、列が[一時的に]メモリに読み込まれるかどうかはわかりません。秘訣は、列の型を指定して、不要な"blank"ものを入れることです。

readxl::read_excel(system.file("extdata/datasets.xlsx", package = "readxl"),
                   col_types = c('blank', 'blank', 'numeric', 'numeric', 'text'))
## # A tibble: 150 x 3
##    Petal.Length Petal.Width Species
##           <dbl>       <dbl>   <chr>
## 1           1.4         0.2  setosa
## 2           1.4         0.2  setosa
## 3           1.3         0.2  setosa
## 4           1.5         0.2  setosa
## 5           1.4         0.2  setosa
## 6           1.7         0.4  setosa
## 7           1.4         0.3  setosa
## 8           1.5         0.2  setosa
## 9           1.4         0.2  setosa
## 10          1.5         0.1  setosa
## # ... with 140 more rows

警告は、必要な列のすべてのデータ型を知る必要があるということですが、いつでもテキストから始めて、後でクリーンアップすることができると思いますtype.convert

于 2016-07-15T22:11:20.783 に答える