【问题标题】:Why is this not being read as numeric when I specify it?为什么在我指定它时不会将其读取为数字?
【发布时间】:2012-10-29 22:52:57
【问题描述】:

我已经把它缩小到一个非常小的例子,所以我确信这是非常愚蠢的。

我有文件test.delete 包含以下内容:

Rock,bird
1350909372121900000,55.20000
1350909372318100000,55.30000
1350909382020900000,55.20000
1350909382029600000,55.20000
1350909384311100000,55.20000

然后我做:

test = read.csv('test.delete', colClasses=c('character','numeric'))

但所有列似乎都被读为字符:

> apply(test, 2, class)
       Rock        bird
"character" "character"

这是为什么?

【问题讨论】:

  • 来自?apply: "如果 X 不是一个数组,而是一个具有非 null 暗值的类的对象(例如数据框),则应用尝试通过以下方式将其强制转换为数组as.matrix 如果它是二维的(例如,数据框)或通过 as.array。"

标签: r csv


【解决方案1】:

read.csv 正在按您的意愿工作。你在这里误用了apply

如果您对导入的数据运行str,您应该会看到另一个变量是数字。但是当你调用apply时,数据框被强制转换为矩阵,它只处理一种数据类型,一切都被强制转换为字符。

检查列类的更安全方法是使用lapply,因为 data.frame 实际上是一个列表。

【讨论】:

  • 我一直在使用sapply(names(dat), function(x) class(dat$x))。但是sapply(dat,class) 干净多了。哦。
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
相关资源
最近更新 更多