为什么 R 中的 read.csv 将字段转换为某些文件的因子,而不是其他文件?

Why does read.csv in R convert fields to factors for some files, and not in others?

我有几个站点的天气数据表。当我使用 read.csv 分别导入它们时,字段是因子、整数和数字。但是,当我尝试导入一个包含所有数据的 csv 文件时,数据框中的结果字段都是因素。在组合文件中,第一个字段有几个字母数字变量,而在单个文件中只有一个变量(站名)。

这是 base R 中 data.frame() 的常见行为。大多数情况下,read.csv() 的结果将存储在 data.frame 中。正如@Duck 在评论部分中建议的那样,您可以通过将 stringsAsFactors 参数设置为 FALSE 来避免这种行为。

read.csv('myfile.csv', stringsAsFactors = FALSE)

您可以在 data.frame 函数的文档页面上查看下面的描述。您可以使用 ?data.frame 命令访问此文档。

Character variables passed to data.frame are converted to factor columns unless protected by I() or argument stringsAsFactors is false.

所以在你的例子中,这发生在你的组合文件中,因为 R 将所有变量解释为字符。为什么?可能是因为在您的一个(或某些)文件中,在数字和整数列中,某些数据行的格式不正确。例如,也许在一行中,您有一个“x”来表示缺失值。 read.csv() 使用整个文件来决定每列的数据格式,因此一旦函数达到此“x”值,它就会将整个列解释为字符。当此数据传递给 data.frame() 时,该函数会将这些字符转换为因子。您很遗憾,在组合文件中,您在第一个字段中有一些字母数字值。因此,这些值可能是产生问题的“x”。