【问题标题】:Converting factor to numeric将因子转换为数字
【发布时间】:2015-06-01 21:20:39
【问题描述】:

我有一个 300 万行、500 列的数据集。虽然列是数字,但从 csv 文件导入时,所有列都被视为因子,而不是数字。我正在尝试使用命令将它们转换回数字

wikifixedn<-as.numeric(as.character(wikifixed))

wikifixed 是数据框。

这需要很长时间……我的 MacBook Pro,配备 16GB 内存和 2.3GHz Core i7,已经为此运行了一个多小时。我可以在某个地方看到我在这个过程中走了多远,或者这个过程是否正在推进?这里有另一种更快的方法来处理对话问题吗?

顺便说一句:我在导入 csv 文件时尝试使用

强制将列视为数字
> wikifixed<-read.csv('~/OneDrive/kredible/finaldata/wutao/wikipediausers.csv', header = TRUE, stringsAsFactors=F)

然而,当我检查时,我得到了

> is.numeric(wikifixed)
[1] FALSE

【问题讨论】:

  • as.numeric(levels(yourfactor))[yourfactor] 会更快
  • 我会使用 data.table 包中的 fread 来读入。还要查看 colClasses 参数(也在 read,csv 中)
  • 值得一试readr::read_csv('yourfile')

标签: r csv import type-conversion


【解决方案1】:

看这里

https://stat.ethz.ch/R-manual/R-devel/library/utils/html/read.table.html

你可能应该为 colClasses 创建一个向量

read.table(file, header = FALSE, sep = "", quote = "\"'",
       dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
       row.names, col.names, as.is = !stringsAsFactors,
       na.strings = "NA", colClasses = NA, nrows = -1,
       skip = 0, check.names = TRUE, fill = !blank.lines.skip,
       strip.white = FALSE, blank.lines.skip = TRUE,
       comment.char = "#",
       allowEscapes = FALSE, flush = FALSE,
       stringsAsFactors = default.stringsAsFactors(),
       fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)

stringsAsFactors

逻辑:字符向量是否应该转换为因子?请注意,这被 as.is 和 colClasses 覆盖,两者都允许更精细的控制。

col类

字符。为列假定的类向量。必要时回收,或者如果字符向量被命名,则将未指定的值视为 NA。

可能的值是 NA(默认值,当使用 type.convert 时)、“NULL”(当列被跳过时)、原子向量类之一(逻辑、整数、数字、复杂、字符、原始),或“因子”、“日期”或“POSIXct”。否则需要有一个 as 方法(来自包方法)用于从“字符”转换为指定的正式类。

请注意,colClasses 是按列(而不是每个变量)指定的,因此包括行名列(如果有)。

如果您想访问 data.table,也请参阅此处,因为您可能会遇到更多问题。

fread in R imports a large .csv file as a data frame with one row

require(data.table)
fread("pre2012_alldatapoints.csv", sep = ",", header= TRUE)

阅读

data.table 常见问题解答位于

https://github.com/Rdatatable/data.table/wiki

【讨论】:

  • 非常感谢@Ajay Ohri
猜你喜欢
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多