行のないdata.frameを初期化しようとしています。基本的には、各列のデータタイプを指定して名前を付けたいのですが、結果として行が作成されることはありません。
これまでのところ、私ができる最善の方法は次のようなものです。
df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),
File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]
これは、私が望んでいたデータタイプと列名をすべて含む1行のdata.frameを作成しますが、同時に無駄な行を作成し、それを削除する必要があります。
何か良い方法はありますか?
空のベクターで初期化するだけです。
df <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
列の種類が異なる別の例を示します。
df <- data.frame(Doubles=double(),
Ints=integer(),
Factors=factor(),
Logicals=logical(),
Characters=character(),
stringsAsFactors=FALSE)
str(df)
> str(df)
'data.frame': 0 obs. of 5 variables:
$ Doubles : num
$ Ints : int
$ Factors : Factor w/ 0 levels:
$ Logicals : logi
$ Characters: chr
N.B. :
間違った型の空の列で data.frame
を初期化しても、異なる型の列を持つ行の追加を防ぐことはできません。
この方法は、最初から正しい列の型を持っているという意味で、少しだけ安全です。したがって、もしあなたのコードが何らかの列の型のチェックに依存しているならば、0行のdata.frame
でも動作します。
次のように、入力の text
に空の文字列を指定して、read.table
を使用することができます。
colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")
df <- read.table(text = "",
colClasses = colClasses,
col.names = col.names)
また、col.names
を文字列で指定することもできます。
df <- read.csv(text="Date,File,User", colClasses = colClasses)
Richard Scriven氏による改良に感謝します。