数値と文字値を含む.csvファイルから取得したデータフレームがあります。このデータフレームを行列に変換します。含まれる情報はすべて数字(削除した非数字行)であるため、データフレームを数値行列に変換することができるはずです。ただし、文字マトリックスは取得します。
これを解決する唯一の方法は、すべての行にas.numeric
を使用することですが、これにはかなり時間がかかります。何らかの種類のif(i in 1:n)
- formでこれを行う方法はあると確信していますが、どのように機能するかはわかりません。または、ここで提案されているように、すでに数値ですでに開始する唯一の方法です( 行列の数値と名前の順序を作成する )?
おそらくこれはあなたのほとんどにとって非常に簡単なことです:P
マトリックスは非常に大きく、これは最初の数行のみです...コードは次のとおりです。
cbind(
as.numeric(SFI.Matrix[ ,1]),
as.numeric(SFI.Matrix[ ,2]),
as.numeric(SFI.Matrix[ ,3]),
as.numeric(SFI.Matrix[ ,4]),
as.numeric(SFI.Matrix[ ,5]),
as.numeric(SFI.Matrix[ ,6]))
# to get something like this again:
Social.Assistance Danger.Poverty GINI S80S20 Low.Edu Unemployment
0.147 0.125 0.34 5.5 0.149 0.135 0.18683691
0.258 0.229 0.27 3.8 0.211 0.175 0.22329362
0.207 0.119 0.22 3.1 0.139 0.163 0.07170422
0.219 0.166 0.25 3.6 0.114 0.163 0.03638525
0.278 0.218 0.29 4.1 0.270 0.198 0.27407825
0.288 0.204 0.26 3.6 0.303 0.211 0.22372633
助けてくれてありがとう!
編集2:@flodelの答えをご覧ください。ずっといい。
試してください:
# assuming SFI is your data.frame
as.matrix(sapply(SFI, as.numeric))
編集:または@ CarlWitthoftがコメントで示唆したとおり:
matrix(as.numeric(unlist(SFI)),nrow=nrow(SFI))
data.matrix(SFI)
?data.matrix
から:
Description:
Return the matrix obtained by converting all the variables in a
data frame to numeric mode and then binding them together as the
columns of a matrix. Factors and ordered factors are replaced by
their internal codes.
データフレームに数字のみが含まれる場合の代替方法を次に示します。
apply(as.matrix.noquote(SFI),2,as.numeric)
しかし、データフレームを行列に変換する最も信頼できる方法は、data.matrix()
関数を使用することです。
別の方法として、read.table()
引数colClasses
を使用して、colClasses=c(*column class types*)
を作成することにより列タイプを指定する方法があります。メンバーが数値として必要な列が6つある場合は、文字列を"numeric"
をコンマで区切って6回繰り返し、データフレームをインポートし、as.matrix()
データフレームをインポートする必要があります。追伸ヘッダーがあるように見えるので、header=T
と入力します。
as.matrix(read.table(SFI.matrix,header=T,
colClasses=c("numeric","numeric","numeric","numeric","numeric","numeric"),
sep=","))
私は同じ問題を抱えていましたが、行名のない元のデータフレームを取得して後で追加することで、このように解決しました
SFIo <- as.matrix(apply(SFI[,-1],2,as.numeric))
row.names(SFIo) <- SFI[,1]