1

列に可変量の数値と可変量の NA が含まれるデータフレームがあります。データフレームは次のようになります。

    V1 V2 V3 V4 V5 V6
1    0 11  4  0  0 10
2    0 17  3  0  2  2
3   NA  0  4  0  1  9
4   NA 12 NA  1  1  0
<snip>
743 NA NA NA NA  8 NA
744 NA NA NA NA  0 NA

これから箱ひげ図を作りたいのですが、そうすると

boxplot(dataframe)

エラーが発生します

adding class "factor" to an invalid object

私がする時

lapply(dataframe,class)

次の出力が得られます。

$V1
[1] "factor"
$V2
[1] "factor"
<snip>
$V6
[1] "factor"

では、列が数値として表示されるようにデータフレームを変更するにはどうすればよいですか?

4

3 に答える 3

5

as.numeric(as.character(...))各因子列に適用します。以下のコードは、因子変数のみに影響を与え、数値型をそのままにする方法を示しています。

## dummy data
df <- data.frame(V1 = factor(sample(1:5, 10, rep = TRUE)),
                 V2 = factor(sample(99:101, 10, rep = TRUE)),
                 V3 = factor(sample(1:2, 10, rep = TRUE)),
                 V4 = 1:10)

df2 <- data.frame(sapply(df, function(x) { if(is.factor(x)) {
                                              as.numeric(as.character(x))
                                           } else {
                                              x
                                           }
                                         }))

これは与える:

> df2
   V1  V2 V3 V4
1   4 101  2  1
2   1 100  1  2
3   5  99  2  3
4   4  99  2  4
5   2 100  1  5
6   2 100  2  6
7   2 101  2  7
8   4 100  1  8
9   2 101  2  9
10  4 101  1 10
> str(df2)
'data.frame':   10 obs. of  4 variables:
 $ V1: num  4 1 5 4 2 2 2 4 2 4
 $ V2: num  101 100 99 99 100 100 101 100 101 101
 $ V3: num  2 1 2 2 1 2 2 1 2 1
 $ V4: num  1 2 3 4 5 6 7 8 9 10
于 2012-02-28T18:15:57.047 に答える
2

どうですか

as.data.frame(lapply(dat1,function(x){as.numeric(as.character(x))}))

これは、各列を数値に変換するだけです(最初に文字に変換した後)。係数を数値に単純に変換すると、通常、表示されている値ではなく、基になる整数コードが生成されるため、これには注意する必要があります。

于 2012-02-28T18:12:47.813 に答える
1

テストdata.frameを使用:

testframe <- data.frame(V1 = as.factor(c(0,0,NA,NA)), V2 = as.factor(c(11,17,0,12)))

> sapply(testframe, class)
      V1       V2 
"factor" "factor" 

あなたが使用することができます

testframe.n <- as.data.frame(sapply(testframe, as.numeric))

> sapply(testframe.n, class)
       V1        V2 
"numeric" "numeric" 

これで、すべての列が数値になり、boxplot を呼び出すことができます。

于 2012-02-28T18:17:30.670 に答える