如何更改因子的数据帧,以便可以对数据帧进行boxplotted?

Nie*_*ein 1 r boxplot dataframe r-factor

我有一个数据框,其中的列包含可变数量的数字和可变数量的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
Run Code Online (Sandbox Code Playgroud)

我想制作一个箱形图,但是当我这样做的时候

boxplot(dataframe)
Run Code Online (Sandbox Code Playgroud)

我收到了错误

adding class "factor" to an invalid object
Run Code Online (Sandbox Code Playgroud)

当我做

lapply(dataframe,class)
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

$V1
[1] "factor"
$V2
[1] "factor"
<snip>
$V6
[1] "factor"
Run Code Online (Sandbox Code Playgroud)

那么如何更改我的数据框以便将列视为数字?

Rei*_*son 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
                                           }
                                         }))
Run Code Online (Sandbox Code Playgroud)

这给出了:

> 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
Run Code Online (Sandbox Code Playgroud)