1

次の data.frame をビルドすると:

cntrydata<-as.data.frame(cbind(c('BE', 'BG', 'CH', 'CY', 'CZ', 'DE', 'DK', 'EE', 
             'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 
             'IL', 'LT', 'NL', 'NO', 'PL', 'PT', 'RU', 'SE', 
             'SI', 'SK', 'UA'),c('C', 'P', 'C', 'P', 'P', 'C', 
             'C', 'C', 'C', 'C', 'C', 'C', 'P', 'P', 'P', 'C',
             'P', 'P', 'C', 'C', 'P', 'C', 'P', 'C', 'P', 'P', 'P'),
              c(7.1, 3.6, 8.7, 6.3, 4.6, 7.9, 9.3, 6.5, 
                6.1, 9.1, 6.8, 7.6, 3.5, 4.1, 4.7, 8, 6.1, 5, 8.8,
                8.6, 5.3, 6, 2.1, 9.2, 6.4, 4.3, 2.4)))
colnames(cntrydata)<-c('cntry','mode','CPI')

CPI 変数は ですがclass(factor)、次の関数を機能させるには数値にする必要があります。

boxplot(CPI~mode, data=cntrydata)

私は次のことを試しました:

as.numeric(levels(cntrydata$CPI))[cntrydata$CPI]

How to convert a factor to an integer\numeric without the loss of information? のアドバイスに従って

しかし、それはまだクラス要因です。私の目標を達成する方法はありますか?

また、それほど重要ではありませんがcolnames、データ構築コマンドに引数を含める方法を探していました (最終的に行ったように、その後ではなく)。しかし、それをどこに、どのように配置するかを見つけることができませんでしたか?

4

3 に答える 3

2

以下は変換を行います:

cntrydata$CPI <- as.numeric(as.character(cntrydata$CPI))

次のようにデータ フレームを作成した場合、問題は発生せず、列名も取得できます。

> cntrydata <- data.frame(cntry=c('BE', 'BG', 'CH', 'CY', 'CZ', 'DE', 'DK', 'EE', 
+              'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 
+              'IL', 'LT', 'NL', 'NO', 'PL', 'PT', 'RU', 'SE', 
+              'SI', 'SK', 'UA'), mode=c('C', 'P', 'C', 'P', 'P', 'C', 
+              'C', 'C', 'C', 'C', 'C', 'C', 'P', 'P', 'P', 'C',
+              'P', 'P', 'C', 'C', 'P', 'C', 'P', 'C', 'P', 'P', 'P'),
+               CPI=c(7.1, 3.6, 8.7, 6.3, 4.6, 7.9, 9.3, 6.5, 
+                 6.1, 9.1, 6.8, 7.6, 3.5, 4.1, 4.7, 8, 6.1, 5, 8.8,
+                 8.6, 5.3, 6, 2.1, 9.2, 6.4, 4.3, 2.4))
于 2013-04-01T16:03:44.280 に答える
0

as.character() 前に使用する必要がありますas.numeric

この理由factorは、実際には s がキーと値のラベルを持つ整数であるためです。
単純に使用するas.numeric(someFactor)と、キーと同等のものを取得できます。
経由で取得できる値と同等の値が必要ですas.character
ただし、最終結果を数値にしたい場合は、すべてをまとめてラップします。

 as.numeric(as.character(someFactor))

比較:

 > as.numeric(cntrydata$CPI)
  [1] 17  4 22 13  7 19 26 15 12 24 16 18  3  5  8 20 12  9 23 21 10 11  1 25 14  6  2

 > as.numeric(as.character(cntrydata$CPI))
  [1] 7.1 3.6 8.7 6.3 4.6 7.9 9.3 6.5 6.1 9.1 6.8 7.6 3.5 4.1 4.7 8.0 6.1 5.0 8.8 8.6
 [21] 5.3 6.0 2.1 9.2 6.4 4.3 2.4
于 2013-04-01T16:04:08.187 に答える