【问题标题】:Why does creating a new dataframe using cbind automatically convert a numeric column into factor?为什么使用 cbind 创建新数据框会自动将数字列转换为因子?
【发布时间】:2016-02-21 00:24:14
【问题描述】:

我有L:

   Var1 Freq
2  1103    6
6  1107   10
10 1112    7
21 1125    6
24 1129   10
31 1137    5

pct:

head(pct)
[1] 0.806 0.706 0.781 0.800 0.655 0.844

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

str(pct)
num [1:68] 0.806 0.706 0.781 0.8 0.655 0.844

但是,一旦我将Lpct 结合在一起

pct_by <- as.data.frame(cbind(as.vector(L$Var1), pct))

我看到这个新的数据框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 ...

这是为什么?如何更改 pct_by$pct 使其原来是数字而不是因子?

【问题讨论】:

  • 根本不要cbind。这是人们似乎从旧教程或其他东西中养成的坏习惯。只需使用pct_by &lt;- data.frame(L$Var1, pct)。问题是 cbind 会更喜欢返回一个矩阵,而矩阵只能保存一个 data.type。
  • @MrFlick 你的评论看起来像是对我的回答......

标签: r dataframe


【解决方案1】:

根本不要使用cbind。这是人们似乎从旧教程或其他东西中养成的坏习惯。只需使用:

pct_by <- data.frame(L$Var1, pct)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多