【问题标题】:Why does R mix up numerical with categorial variables?为什么 R 将数字与分类变量混为一谈?
【发布时间】:2014-04-29 17:30:46
【问题描述】:

我很困惑。我在 R 中输入了一个 .csv 文件,并希望拟合一个线性多元回归模型。 但是,R 将我所有明显的数字变量声明为因子,将我的分类变量声明为整数。因此,我无法拟合模型。

有谁知道如何解决这个问题?

我知道这可能是非常基本的。但我真的需要知道这一点。在其他地方,我只发现有关如何声明因素的帖子。但这不适用于这里。

非常感谢任何建议!

【问题讨论】:

  • 您使用的是什么版本的 R。你能举一个可重现的例子吗?如果是 R 3.1.0,请查看:stackoverflow.com/questions/22962917/…
  • 你是在用temp <- read.csv('file.csv')阅读csv吗?
  • 一般来说,如果我们看不到数据本身(更不用说用于读取的命令),关于从文件中读取的数据被误解的问题非常它在)。通常这意味着您文件中的数据不是以“标准”方式存储的,或者至少不包含您认为的内容。但是如果没有看到文件本身,这真的是不可能的。

标签: r regression linear-regression


【解决方案1】:

imo 处理这个问题的最简单方法是在将列读入工作区时告诉 R 你的列包含什么类型的数据。例如,如果您有一个 csv 文件,其中第一列应该是字符,第 2-21 列应该是数字,第 22 列应该是一个因素,这就是我将该 csv 文件读入工作区的方式:

 Data <- read.csv("MyData.csv", colClasses=c("character", rep("numeric", 20), "factor"))

【讨论】:

  • 这是一个不错的方法。当然,如果你不知道列索引(或者想编写一个不知道该列的脚本),那就有缺点了。
【解决方案2】:

有时(对于某些版本的 R,正如 Andrew 指出的那样)CSV 中的浮点条目足够长,以至于它认为它们是字符串而不是浮点数。在这种情况下,您可以执行以下操作

data <- read.csv("filename.csv")
data$some.column <- as.numeric(as.character(data$some.column))

或者您可以将stringsAsFactors=F 传递给read.csv 调用,然后在下一行应用as.numeric。如果您有大量数据,这可能不是一个好主意。

很难说分类变量发生了什么。您可能想尝试将它们视为字符串,看看它是如何工作的。有时 R 会将因子向量视为数字类型,因此这是一个很好的第一次健全性检查。如果这不起作用,您还可以查看相关回归函数是否允许您声明应如何处理变量。

【讨论】:

  • 非常感谢您的帮助!我修好了它。正如 joran 所提到的,在没有看到数据的情况下可能很难回答这类问题。但是你的建议,LauraS 和 metasoarous,工作得很好,除了一列。一个列标题称为“x 的百分比”。我使用 rstudio 和 R3.1.0(感谢 Andrew)。将其替换为“x 的百分比”后,它起作用了。现在可以毫无问题地阅读其他列...干杯,保罗
【解决方案3】:

如果没有您的数据文件样本和您用来尝试处理数据的命令,很难判断,但这里有一些可能导致您所描述的一般问题(尽管可能还有其他问题)可能性)。

read.csvread.table(由 read.csv 调用)函数将尝试猜测数据的类型,当他们没有被告知每列应该是什么时(colClasses 参数)。如果一切看起来像一个数字,那么它将转换为一个数字,但如果它在第一行中看到任何看起来不像数字的一部分的东西,那么它将作为字符读入并转换为一个因子。您认为应该是数字但 R 看到非数字的一些常见原因包括:手指滑动导致列中某处出现字母;看起来相似的替换,O 代表 0 或 l 代表 1;一个不需要的逗号,许多欧洲文件使用,,R 需要.(但这里有选项告诉R 你想要什么),或者如果你使用read.table 而不设置sep,而实际上是一个逗号分隔的文件。

如果你有一个用整数表示的分类变量,那么 R 会将它转换为整数,除非你告诉它做一个因子。如果您在一个因子上使用as.numeric,那么它将返回用于在内部表示该因子的整数。如何将带有数字标签的因子转换为数字是常见问题解答中的一个问题(和答案)。

如果这没有为您指明正确的方向,请向我们提供您的数据样本以及您使用的命令。

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2012-02-24
    • 2018-06-03
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多