我有一个拥有5700万行和23列的数据集。有一个列有不同鸟类的物种名称(约2000个唯一名称),我想为每个独特的物种名称提取两列数据(纬度,经度),并写入每个列的纬度/经度数据。物种,物种名称作为文件名。这是我知道的唯一语言R需要很长时间。适合这项任务的代码是什么?
我在这里尝试一些伪代码来演示我猜测的代码可能是什么样的,粗略地说:
FOR i IN 1:unique(species_name)
SELECT latitude,longitude WHERE species_name=[i]
WRITE [some code that writes a text file with species name as the file name]
LOOP END;
我想我可以在OSX上的Terminal做这种事情吗?
编辑20111211: 这是我在R的工作流程:
require(RMySQL);
require(plyr)
drv <- dbDriver("MySQL")
con <- dbConnect(drv, user = "asdfaf", dbname = "test", host = "localhost")
splist <- read.csv("splist_use.csv")
sqlwrite <- function(spname) {
cat(spname) g1 <- dbGetQuery(con
, paste("SELECT col_16,col_18 FROM dat WHERE col_11='"
, spname, "'", sep="")
)
write.csv(g1, paste(spname, ".csv", sep=""))
rm("g1") }
l_ply(splist, sqlwrite, .progress="text" )
答案 0 :(得分:1)
恕我直言,你能做的最好的事情是使用脚本语言(python,perl,php,shell)并从那里生成文件名和查询。这不是太难,但你必须学习不同的语言。 SQL不适合命令式编程。
答案 1 :(得分:1)
您是否尝试过使用MySQL outfile功能?
SELECT col_16,col_18
FROM
dat
WHERE col_11= spiecesname
INTO OUTFILE '/tmp/spiecesname.csb'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
通过一些工作,您可以让MySQL选择每个唯一的Species名称,循环结果并输出到唯一的csv文件。
您的查询应该有一个order by子句
答案 2 :(得分:0)
是一个可接受的Excel文件输出,你有excel吗?如果是这样,您可以使用Excel连接到数据库,并发出查询以提取数据。它是在.xls或csv中。格式。但是,假设您的结果小于1,000,000。
在excel中 转到数据选项卡 从其他来源中选择 选择并输入首选连接方法 从这里,您可以定义要运行的表或查询。 (如果结果小于您所使用的Excel版本的工作表支持的行数),则使用您选择的方法将提取文件。应该比你目前正在做的IO更快。