CSV ファイルのデータで,ある変数の条件によりデータを選択して別ファイルに書き出す。
100000x1500 のデータで,1列目の変数が 80 より大きいもののみ別ファイルに書き出す。
system.time({
df = read.csv("test.csv")
write.csv(df[df[,1] > 80,], "select2.csv", row.names=FALSE)
})
これだと,75.519 秒かかる。
system.time({
library(data.table)
df = as.data.frame(fread("test.csv"))
write.csv(df[df[,1] > 80,], "select2.csv", row.names=FALSE)
})
これだと,5.531 秒かかる。
AWK を使うと,ものすごく速い。
$ cat select.awk
BEGIN {
FS = ","
getline
print $0
}
$1 > 80 {
print $0
}
$ time awk -f select.awk < test.csv > select1.csv
0.541u 0.165s 0:00.71 98.5% 0+0k 0+0io 84pf+0w
0.541 秒である。
なお,注意すべきは,プログラムはターミナルで動かすこと。
R の中で system("awk -f select.awk < test.csv > select1.csv") なんてやると,53 秒かかる。