13

Melt.data.frame のデフォルトの動作は、"factor" クラスの "variable" 列を返すことです。次に例を示します。

> head(airquality)

  ozone solar.r wind temp month day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

> x = melt(head(airquality))
Using  as id variables

> head(x)
  variable value
1    ozone    41
2    ozone    36
3    ozone    12
4    ozone    18
5    ozone    NA
6    ozone    28

> class(x$variable)
[1] "factor"

問題は、クラスをファクターからキャラクターに変更するパラメーターがあるかどうかです。試しoptions(stringsAsFactors = FALSE)ましたが、うまくいきません。

4

2 に答える 2

5

にそのようなオプションが組み込まれているとは思いませんmelt.data.frame。ただし、コードを調べれば、変更するのは難しくありません。melt.df関連する行を、ユーザーが設定したかどうかを確認するためのクイックチェックに置き換える新しい関数を定義できますstringsAsFactors = FALSE

if (getOption("stringsAsFactors")){
    df[[variable_name]] <- factor(df[[variable_name]], 
                                   unique(df[[variable_name]]))
}
else{
   df[[variable_name]] <- as.character(factor(df[[variable_name]],         
                                   unique(df[[variable_name]])))
}

私はあなたの簡単な例でこれをチェックしました、そしてそれは期待通りに働きました、しかし私はそれをより一般的にチェックしていません、それで注意してください。この変更が他の状況で驚くべき動作を引き起こさないと私は確信していません。

于 2011-09-14T21:44:07.257 に答える