【问题标题】:as.data.frame and cbind results in factor columnsas.data.frame 和 cbind 导致因子列
【发布时间】:2012-06-07 02:10:11
【问题描述】:

我有一个混合了整数、字符和字符串列的大 data.frame。我需要按数字列对 data.frame 进行排序。

当我将原始列合并到 data.frame 中时,所有列都更改为因子,包括我需要进行排序的列。所以排序给出类似1, 10, 100...而不是1, 2, 3...

这是我的问题的一个例子。

a <- 1:10
b <- c(1,3,5,6,2,10,100,110,7,4)
c <- LETTERS[1:10]
d <- as.data.frame(cbind(a, b, c))  # I am using this construction
e <- d[with(d, order(b)), ]

我该如何解决这个问题?

【问题讨论】:

  • 试试d &lt;- data.frame(a, b, c)
  • 我刚刚找到该表格并进行了测试。有用!。发表您的评论作为答案,我会接受。谢谢
  • 人们从哪里得到他们应该使用 data.frame(cbind(...)) 构造的概念???!!!???如果参数中有一个字符向量,它将强制所有向量转换为字符(正如@TimP 和 kohske 指出的那样,它将把它们变成因子。)有一个 options() 设置来更改默认值字符串AsFactors 为FALSE。
  • @DWin - 关于该选项的有用点,但我的偏好是防御性并明确添加 stringsAsFactors 参数......对于其他人来说太容易意外运行代码(或它)在选项未正确启用的情况下,诊断和解决问题所需的时间通常会使添加这几个字符所需的几秒钟相形见绌! :)
  • @DWin 我不知道其他人从哪里得到它,但我在学习 R 时被渗透吸收了,后来不得不努力争取摆脱它。

标签: r


【解决方案1】:

其实你需要做的:

d <- data.frame(a, b, c, stringsAsFactors=FALSE)

最后一部分stringsAsFactors=FALSE 防止列d$c 被转换为因子。包含它,您的字符串将保留为字符串。

不要忘记stringsAsFactors=FALSE - 它会为你省去无尽的痛苦,相信我!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2017-02-17
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多