[解決済み】reshape2 meltの警告メッセージ
質問内容
私は
melt
という警告メッセージが表示されます。
attributes are not identical across measure variables; they will be dropped
いろいろ調べてみると、変数が異なるクラスであることが原因であるとのことですが、私のデータセットではそうではありません。
これがそのデータセットです。
test <- structure(list(park = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L), .Label = c("miss", "piro", "sacn", "slbe"), class = "factor"),
a1.one = structure(c(3L, 1L, 3L, 3L, 3L, 3L, 1L, 3L, 3L,
3L), .Label = c("agriculture", "beaver", "development", "flooding",
"forest_pathogen", "harvest_00_20", "harvest_30_60", "harvest_70_90",
"none"), class = "factor"), a2.one = structure(c(6L, 6L,
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), .Label = c("development",
"forest_pathogen", "harvest_00_20", "harvest_30_60", "harvest_70_90",
"none"), class = "factor"), a3.one = structure(c(3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("forest_pathogen",
"harvest_00_20", "none"), class = "factor"), a1.two = structure(c(3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("agriculture",
"beaver", "development", "flooding", "forest_pathogen", "harvest_00_20",
"harvest_30_60", "harvest_70_90", "none"), class = "factor"),
a2.two = structure(c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L), .Label = c("development", "forest_pathogen", "harvest_00_20",
"harvest_30_60", "harvest_70_90", "none"), class = "factor"),
a3.two = structure(c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L), .Label = c("forest_pathogen", "harvest_00_20", "none"
), class = "factor")), .Names = c("park", "a1.one", "a2.one",
"a3.one", "a1.two", "a2.two", "a3.two"), row.names = c(NA, 10L
), class = "data.frame")
そして、その構成はこうです。
str(test)
'data.frame': 10 obs. of 7 variables:
$ park : Factor w/ 4 levels "miss","piro",..: 1 1 1 1 1 1 1 1 1 1
$ a1.one: Factor w/ 9 levels "agriculture",..: 3 1 3 3 3 3 1 3 3 3
$ a2.one: Factor w/ 6 levels "development",..: 6 6 6 6 6 6 6 6 6 6
$ a3.one: Factor w/ 3 levels "forest_pathogen",..: 3 3 3 3 3 3 3 3 3 3
$ a1.two: Factor w/ 9 levels "agriculture",..: 3 3 3 3 3 3 3 3 3 3
$ a2.two: Factor w/ 6 levels "development",..: 6 6 6 6 6 6 6 6 6 6
$ a3.two: Factor w/ 3 levels "forest_pathogen",..: 3 3 3 3 3 3 3 3 3 3
変数ごとにレベル数が違うからでしょうか?では、この場合、警告メッセージは無視してもいいのでしょうか?
警告メッセージを発生させるには。
library(reshape2)
test.m <- melt (test,id.vars=c('park'))
Warning message:
attributes are not identical across measure variables; they will be dropped
ありがとうございます。
どのように解決するのですか?
解説です。
溶かすということは、複数の列を1つにまとめるということです。 この場合、因子列を結合していることになり、それぞれの因子列には
levels
属性があります。 これらのレベルは、実際にはファクターが異なるため、カラム間で同じではありません。
melt
を作成する際に、各要素を文字に強制し、その属性を削除するだけです。
value
カラムを作成します。
この場合、警告は重要ではありませんが、同じ"type"でない列を組み合わせる場合は、非常に注意する必要があります。quot;type"は単なるベクトルの型ではなく、それが参照するものの性質を一般的に意味します。 例えば、速度をMPHで表した列と重さをLBで表した列を溶かしたくはないでしょう。
要因の列を組み合わせても問題ないことを確認する1つの方法は、ある列で考えられる値が、他のすべての列で妥当な値であるかどうかを自問することです。 もしそうであれば、おそらく正しいことは、すべての因子列が受け入れ可能なすべてのレベルを(同じ順序で)持っていることを確認することでしょう。 このようにすれば、テーブルを溶かしたときに警告が出ることはありません。
図解です。
library(reshape2)
DF <- data.frame(id=1:3, x=letters[1:3], y=rev(letters)[1:3])
str(DF)
のレベルは
x
と
y
は同じではありません。
'data.frame': 3 obs. of 3 variables:
$ id: int 1 2 3
$ x : Factor w/ 3 levels "a","b","c": 1 2 3
$ y : Factor w/ 3 levels "x","y","z": 3 2 1
ここでは
melt
というカラムを見てください。
x
と
y
に溶かし込んでいました(
value
):
melt(DF, id.vars="id")$value
文字ベクトルと警告を取得します。
[1] "a" "b" "c" "z" "y" "x"
Warning message:
attributes are not identical across measure variables; they will be dropped
しかし、もし私たちが同じレベルを持つように要因をリセットし、その時だけ溶かすとしたら。
DF[2:3] <- lapply(DF[2:3], factor, levels=letters)
melt(DF, id.vars="id", factorsAsStrings=F)$value
正しいファクターが得られ、警告も出ません。
[1] a b c z y x
Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z
のデフォルトの動作は
melt
は、因子レベルが同じでもドロップするようになっているので、そのために
factorsAsStrings=F
上記のとおりです。 もしその設定を使わなければ、文字ベクターは出ても警告は出なかったはずです。 私は、デフォルトの動作は、結果を要因として維持することであるべきだと主張しますが、ここではそうではありません。
関連
-
[解決済み】model.frame.defaultでのエラー:変数の長さが異なる
-
[解決済み] Stataバージョン5-12の.dtaファイルではない
-
[解決済み】R - if文の引数の長さが0である。
-
[解決済み】ggplot boxplotでPosition-dodge警告?
-
[解決済み】R Markdown - html出力でフォントサイズとフォントタイプを変更する
-
[解決済み】Rヒストグラムの範囲エラー:いくつかの'x'がカウントされない; 'break'が'x'の範囲に及ばないかもしれない
-
[解決済み】r Error dim(X) must have a positive length?
-
[解決済み】randomForestの実行予測で「NA/NaN/Inf in foreign function call (arg 7)」をなくすには?
-
[解決済み】R4DSのエラー比較(1)は、アトミック型とリスト型でのみ可能です
-
[解決済み】seq_alongはうまくいくが、seqが意図しない結果を生む例とは?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】R:関数に有限な'ylim'値が必要
-
[解決済み】R: 複数行の ggplot2 コマンドで「単項演算子エラー」が発生する。
-
[解決済み】基本 - T-検定 -> グループ化因子は正確に2水準でなければならない
-
[解決済み】数学関数への非数値引数
-
[解決済み】エラー:ベクターメモリの枯渇(制限に達したか) R 3.5.0 macOS
-
[解決済み】Rで「パッケージ'FILE_PATH'のインストールで終了ステータスが0でなかった」。
-
[解決済み】Rでの関数の最適化(L-BFGS-Bでは'fn'に有限の値が必要)。
-
[解決済み】エラー。Rの'break'の数が無効
-
[解決済み】ロジスティック回帰 - eval(family$initialize) : y 値は 0 <= y <= 1 である必要があります。
-
[解決済み】Rでデータフレームのサブセットをプロットする方法は?