【发布时间】:2018-04-05 20:25:20
【问题描述】:
我在超过 100 列的数据框中有大约 30 列。我正在读取的文件将其数字存储为字符。换句话说,1300 是 1300,R 认为它是一个字符。
我正在尝试通过将"," 替换为空并将该字段转换为整数来解决该问题。我不想在每个有问题的列上使用gsub。我宁愿将列存储为有问题的向量,然后对所有列执行一个函数或 loop。
我尝试过使用lapply,但不确定将什么作为“x”变量。
这是我的函数,下面有错误
ItemStats_2014[intColList] <- lapply(ItemStats_2014[intColList],
as.integer(gsub(",", "", ItemStats_2014[intColList])) )
[.data.table(ItemStats_2014, intColList) 中的错误:当 i 是 data.table(或字符向量),连接的列必须是 使用 'on=' 参数(参见 ?data.table)或通过键入 x 指定 (即已排序,并且,标记为已排序,请参见 ?setkey)。键控连接可能 由于 x 已排序,因此对非常大的数据具有进一步的速度优势 在内存中。
【问题讨论】:
-
一开始就不要将整数读入字符串,而是将它们读入整数;
fread()将逗号理解为小数分隔符 -
未来,就
lapply本身而言,您可以在lapply调用中定义函数,如下所示:lapply(ItemStats_2014[intColList], function(x) as.integer(gsub(",", "", x))) -
嘿,我给了你正确的编程答案,包括如何以编程方式轻松找到 colClasses,即使在 100 列 dfs 上也是如此。这是可扩展的,并且不会泄漏内存和浪费 CPU,这与不必要地将整数读取为字符串然后进行转换不同。查看 gc() 以了解您在数字字符串上浪费了多少内存。
标签: r file-io gsub fread number-formatting