4
> library(car)

> df = data.frame(value=c('A', 'B', 'C', 'A'))
> foo = recode(df$value, "'A'=1; 'B'=2; 'C'=3;", as.numeric.result=TRUE)
> mean(foo)
[1] NA
Warning message:
In mean.default(foo) : argument is not numeric or logical: returning NA
> foo
[1] 1 2 3 1
Levels: 1 2 3

うーん。as.numeric.result(デフォルトはTRUE)の定義は、結果がすべて数字の場合、強制的に数字になるというものだと思いました。

この再コーディングの結果を数値にするにはどうすればよいですか?

4

3 に答える 3

5

上のドキュメントを注意深く見ると、次のrecodeことがわかります。

as.factor.result     return a factor; default is TRUE if var is a factor, FALSE otherwise.
as.numeric.result    if TRUE (the default), and as.factor.result is FALSE, 
                      then the result will be coerced to numeric if all values in the 
                      result are numerals—i.e., represent numbers.

だからあなたはas.factor.result=FALSE私が思うに指定する必要があります:

foo = recode(df$value, "'A'=1; 'B'=2; 'C'=3;", as.factor.result=FALSE)

edit のデフォルトas.numeric.resultはTRUEであるためas.factor.result=FALSE、両方を指定するのではなく、を指定するだけで済みます。

于 2011-07-14T22:47:47.533 に答える
3

あなたから?recode、議論について言われていることに注意する必要がありas.numeric.resultます:

as.factor.result: return a factor; default is ‘TRUE’ if ‘var’ is a
          factor, ‘FALSE’ otherwise.

as.numeric.result: if ‘TRUE’ (the default), and ‘as.factor.result’ is
          ‘FALSE’, then the result will be coerced to numeric if all
          values in the result are numerals-i.e., represent numbers.

as.factor.resultデフォルトはに設定されてTRUEいるため、設定内容に関係なく、結果は常に係数になりますas.numeric.result。目的の動作を得るには、との両方as.factor.result = FALSE as.numeric.result = TRUE設定します。

> recode(df$value, "'A'=1; 'B'=2; 'C'=3;", as.numeric.result=TRUE, 
         as.factor.result = FALSE)
[1] 1 2 3 1
于 2011-07-14T22:57:06.557 に答える
3

もう一度使用as.numericしてみてください

> bar <- as.numeric(foo)
> bar
[1] 1 2 3 1
> str(bar)
 num [1:4] 1 2 3 1
于 2011-07-14T22:43:05.163 に答える