我有非常大的表(3000万行),我想加载为R中的数据帧 read.table()有很多方便的功能,但似乎实现中有很多逻辑会减慢速度.在我的情况下,我假设我提前知道列的类型,表不包含任何列标题或行名称,并且没有任何我必须担心的病态字符.
我知道在表格中阅读作为列表使用scan()可能非常快,例如:
datalist <- scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0)))
Run Code Online (Sandbox Code Playgroud)
但是我将此转换为数据帧的一些尝试似乎将上述性能降低了6倍:
df <- as.data.frame(scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0))))
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?或者很可能完全不同的方法来解决问题?
我在SO上已经阅读了一些关于类似问题的参考,但是还没有找到解决方案,并且想知道是否有任何方法只使用data.table来执行以下操作.
我将使用一个简化的示例,但在实践中,我的数据表有> 1000列,类似于var1,var2,... var1000等.
dt <- data.table(uid=c("a","b"), var1=c(1,2), var2=c(100,200))
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种解决方案,可以让我得到一个类似于reshape融化功能的输出 -
> melt(dt, id=c("uid"))
uid variable value
1 a var1 1
2 b var1 2
3 a var2 100
4 b var2 200
Run Code Online (Sandbox Code Playgroud)
也就是说,除了uid之外的所有列都列在单个列下,并且在相邻列中具有相应的值.我已经尝试过使用list等的组合,但可能会遗漏一些明显的东西.
dt中的所有uid都是唯一的.
提前致谢.