我有一个大文件(data.txt,35 GB),有3列。 该文件的一些示例部分如下所示:
... ... ...
5 701565 8679.56
8 1.16201e+006 3193.18
1 1.16173e+006 4457.85
14 1.16173e+006 4457.85
9 1.77942e+006 7208.73
4 1.78011e+006 8239.88
14 1.78019e+006 8195.57
9 2.00206e+006 8858.55
4 2.00199e+006 7924
... ... ...
当第二列中的值介于0到50&000之间时,我想为第3列绘制直方图。
然后我想做另一个直方图,其中第一列的值介于50&#39,000和100� 000之间。等等,等等。
我不知道如何使用sqldf包来说明第二列的条件,因为我没有任何列名?
应该是这样的:
sql ="从文件中选择*其中' column2' > 0和'第2列' < 50000"
如何选择' column2'?
答案 0 :(得分:1)
由于您的数据没有列名,请使用header = F
。
然后尝试以下示例sql:
仅读取那些满足第3列的行<&lt; 5000:
read.csv.sql(file = "test.txt", header = F, sep = " ", sql = "select * from file where v3<5000")
结果:
V1 V2 V3
1 8 1162010 3193.18
2 1 1161730 4457.85
3 14 1161730 4457.85
使用v2按第2列过滤。
答案 1 :(得分:0)
也许有点晚了,但是我遇到了类似的问题,并且设法解决了这个问题:
virtualenv
使用file <- data.frame(RN1 = runif(10), RN2 = 1:10, RN3 = letters[1:10])
sqldf("select Col2 from
(select NULL as Col1, NULL as Col2, NULL as Col3 where 1 = 0 UNION ALL select * from file)")
Col2
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
可以更改查询中列的名称,而不必更改原始data.frame的名称,因此无论名称是否更改或更改,我都可以按位置写一列未知。
更新:
另一个更有效的选择是获取列的名称并按其位置引用它。
(select NULL as Col1, NULL as Col2, NULL as Col3 where 1 = 0 UNION ALL select * from file)