3

data.frameマトリックス形式に変換するのに問題があります。ほとんどの因子変数を含む data.frame を数値行列に変更したかったため、次のコードを使用しました

UN2010frame <- data.matrix(lapply(UN2010, as.numeric))

しかし、 のモードを確認するとUN2010frame、まだリストとして表示されていました。実行したいコード (Ordrating) はリスト形式のデータを受け入れないため、UN2010matrix <- unlist(UN2010frame)以前はマトリックスを非公開にしていました。これを行うと、最初の行 (以前は列名の行でした) が NA に変わりました。このデータ セットを使用して序数 IRT モデルを実行しようとしたときに、次のエラー メッセージが表示されたため、これは私にとって問題でした。

> Error in 1:nrow(Y) : argument of
> length 0

最初の行のすべての値がなくなったためだと思います。

少しでもお役に立てれば幸いです。どうもありがとうございました!

ヘイリー

4

2 に答える 2

1

まず、data.matrix の正しい使い方は次のとおりです。

data.matrix(UN2010)

自動的に数値に変換されるためです。コード内のlapplyは、取得したエラーの最初のソースです。データフレームではなく、リストをdata.matrix関数に入れます。したがって、行列ではなく、行列のリストを返します。

次に、unlist行列ではなくベクトルを返します。ベクトルがあるため、「NAの最初の行」が見つからないことは間違いありません。あなたの混乱の一部を説明するかもしれません。

おそらくどこかに文字列があります。これを数値に変換すると NA が得られます。これを望まない場合は、以降の分析からそれらを除外してください。1 つの可能性はcolwise()plyrパッケージから使用して因子のみを変換することです。

colwise(as.numeric,is.factor)(UN2010)

要因のみを含むデータフレームを返します。data.matrix()これはまたはで簡単に変換できますas.matrix()。または、基本ソリューションを使用します。

id <- sapply(UN2010,is.character)
sapply(UN2010[!id],as.numeric)

これにより、すべての非文字列が数値に変換されたマトリックスが返されます。元の列をすべて含むデータフレームを本当に保持したい場合は、次のことができます。

UN2010frame <- UN2010
UN2010frame[!id] <- lapply(UN2010[!id],as.numeric)

おもちゃのコード例:

UN2010 <- data.frame(
  F1 = factor(rep(letters[1:3],10)),
  F2 = factor(rep(letters[5:10],5)),
  Char = rep(letters[11:16],each=5),
  Num = 1:30,
  stringsAsFactors=FALSE
)
于 2011-04-20T15:30:52.107 に答える
0

as.data.frameの代わりに試してくださいdata.matrix

于 2011-04-20T15:05:59.050 に答える