为什么使用cbind创建新数据框会自动将数字列转换为因子?

use*_*619 3 r dataframe

我有L:

   Var1 Freq
2  1103    6
6  1107   10
10 1112    7
21 1125    6
24 1129   10
31 1137    5
Run Code Online (Sandbox Code Playgroud)

并且pct:

head(pct)
[1] 0.806 0.706 0.781 0.800 0.655 0.844
Run Code Online (Sandbox Code Playgroud)

pct 最初是数字,而不是因素:

str(pct)
num [1:68] 0.806 0.706 0.781 0.8 0.655 0.844
Run Code Online (Sandbox Code Playgroud)

但是,一旦我结合L,并pct连同

pct_by <- as.data.frame(cbind(as.vector(L$Var1), pct))
Run Code Online (Sandbox Code Playgroud)

我看到这个新的数据帧pct_by包含pct因子,如下所示:

str(pct_by
'data.frame':   68 obs. of  2 variables:
$ V1: Factor w/ 68 levels "1103","1107",..: 1 2 3 4 5 6 7 8 9 10 ...
$ pct: Factor w/ 41 levels "0.375","0.529",..: 34 19 29 33 10 37 27 9 12 11 ...
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我怎样才能改变pct_by$pct,因为它是最初的数字,而不是一个因素?

MrF*_*ick 5

完全不要使用cbind.这是一个坏习惯,人们似乎从旧的教程或其他东西.只需使用:

pct_by <- data.frame(L$Var1, pct)
Run Code Online (Sandbox Code Playgroud)

问题是,cbind更喜欢返回矩阵,而矩阵只能容纳一种数据类型.如果其中一个变量是一个字符串,它们将全部转换为字符串,然后在放入data.frame时转换为因子.