如果没有给出列名,如何使用sqldf选择特定列

时间:2016-10-28 12:21:34

标签: r sqldf bigdata

我有一个大文件(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'?

2 个答案:

答案 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)