data.tableの使用に問題があります:列クラスを変換するにはどうすればよいですか?簡単な例を次に示します。data.frameを使用すると、変換に問題はありません。data.tableを使用すると、方法がわかりません。
df <- data.frame(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
#One way: http://stackoverflow.com/questions/2851015/r-convert-data-frame-columns-from-factors-to-characters
df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE)
#Another way
df[, "value"] <- as.numeric(df[, "value"])
library(data.table)
dt <- data.table(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10))
dt <- data.table(lapply(dt, as.character), stringsAsFactors=FALSE)
#Error in rep("", ncol(xi)) : invalid 'times' argument
#Produces error, does data.table not have the option stringsAsFactors?
dt[, "ID", with=FALSE] <- as.character(dt[, "ID", with=FALSE])
#Produces error: Error in `[<-.data.table`(`*tmp*`, , "ID", with = FALSE, value = "c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2)") :
#unused argument(s) (with = FALSE)
ここで明らかな何かを見逃していますか?
マシューの投稿による更新:以前に古いバージョンを使用しましたが、1.6.6(現在使用しているバージョン)に更新した後でもエラーが発生します。
更新2:「factor」クラスのすべての列を「文字」列に変換したいとしますが、どの列がどのクラスのものであるかは事前にわかりません。data.frameを使用すると、次のことができます。
classes <- as.character(sapply(df, class))
colClasses <- which(classes=="factor")
df[, colClasses] <- sapply(df[, colClasses], as.character)
data.tableで同様のことができますか?
更新3:
sessionInfo()Rバージョン2.13.1(2011-07-08)プラットフォーム:x86_64-pc-mingw32 / x64(64ビット)
locale:
[1] C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] data.table_1.6.6
loaded via a namespace (and not attached):
[1] tools_2.13.1
#Produces error
。とにかく+1。エラーは発生しませんが、どのバージョンがありますか?この領域には問題がありますが、以前に発生した問題であり、FR#1224とFR#1493は優先的に対処します。アンドリーの答えは、しかし、最良の方法です。
invalid times argument
エラーについて確信がありますか?私にとってはうまくいきます。どのバージョンがありますか?
data.table
メソッドの "["演算子の引数は、それらの引数とは異なりますdata.frame