为什么R将数值与分类变量混淆?

时间:2014-04-29 17:30:47

标签: r regression linear-regression

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

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

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

非常感谢任何建议!

3 个答案:

答案 0 :(得分:1)

处理这个问题最简单的方法就是告诉R当你将列读入工作区时,列包含哪种类型的数据。例如,如果你有一个csv文件,其中第一列应该是字符,列2-21应该是数字,第22列应该是一个因子,这里是我如何将csv文件读入工作区:< / p>

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

答案 1 :(得分:0)

有时(对于某些版本的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会将因子向量视为数字类型,因此这是一个很好的第一次完整性检查。如果这不起作用,您还可以查看相关的回归函数是否允许您声明应如何处理变量。

答案 2 :(得分:0)

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

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

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

如果这不能指向正确的方向,请提供您的数据样本以及您正在使用的命令。