[解決済み] data.tableのカラムクラスを変換する
2022-07-13 19:28:46
質問
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)
私はここで何か明らかなことを見逃していますか?
Matthewの投稿による更新です。以前は古いバージョンを使っていましたが、1.6.6(現在使っているバージョン)に更新しても、まだエラーが出ます。
更新 2: 例えば、クラス "factor" のすべての列をクラス "character" に変換したいが、どの列がどのクラスであるか事前に分からないとします。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
どのように解決するのですか?
1列の場合。
dtnew <- dt[, Quarter:=as.character(Quarter)]
str(dtnew)
Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables:
$ ID : Factor w/ 2 levels "A","B": 1 1 1 1 1 2 2 2 2 2
$ Quarter: chr "1" "2" "3" "4" ...
$ value : num -0.838 0.146 -1.059 -1.197 0.282 ...
使用方法
lapply
と
as.character
:
dtnew <- dt[, lapply(.SD, as.character), by=ID]
str(dtnew)
Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables:
$ ID : Factor w/ 2 levels "A","B": 1 1 1 1 1 2 2 2 2 2
$ Quarter: chr "1" "2" "3" "4" ...
$ value : chr "1.487145280568" "-0.827845218358881" "0.028977182770002" "1.35392750102305" ...
関連
-
R言語のエラーメッセージと関連する解決策
-
R: エラー: $ 演算子は原子ベクトルに対して無効です。
-
[解決済み] Rでcは何をするのですか?重複] [重複
-
[解決済み] Rで文字列から文字を削除する
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] xkcd風のグラフを作るには?
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み] ベクトル中のxの値を持つ要素の個数を数える
-
[解決済み】data.table vs dplyr:一方がうまくできない、またはうまくできないことを行うことができますか?
-
[解決済み】data.tableで名前を指定してカラムを削除する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決策】 plot.new() のエラー:図の余白が大きすぎる。
-
[解決済み] なぜfactor()ではなく、as.factor()なのか?
-
[解決済み] Rでデータフレームに行を追加する方法は?
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み] ggplot2 Rプロットで軸の制限を設定するには?
-
[解決済み] ggplot2 を使って 2 つの変数を同じグラフに線でプロットする
-
[解決済み】data.frameのカラムを因子から文字に変換する
-
[解決済み】data.frameのグループごとの平均値【重複】について
-
[解決済み】安定したマッピングを持つggplot2のカテゴリ変数に色を割り当てるには?