繁体   English   中英

如何从R中的压缩.csv文件读取多个特定列

[英]how to read multiple specific columns out of compressed .csv file in R

我需要一种快速方法来将压缩为.tar.gz的.csv文件中的多个特定列读取到R中的变量中。

我的方法:

con <- textConnection(system(paste("zcat ", filename.tar.gz, " | cut -d ; -f 1,2,3", sep = "")))
var <- read.csv(con, sep = ";")

好像他不懂管道命令,因为它zcat filename.tar.gz | cut -d ; -f 1,2,3 zcat filename.tar.gz | cut -d ; -f 1,2,3 zcat filename.tar.gz | cut -d ; -f 1,2,3在控制台上工作。

我在R中遇到的错误:

[5] "cut.gz: No such file or directory"                                                                                                                     
[6] ";.gz: No such file or directory"                                                                                                                       
[7] "2.gz: No such file or directory"  

1)管道如果我们在a.tar.gz有一个名为a.csv的csv文件,并且有8列,我们想读取前3列,而忽略其余的列(或者代替使用colClasses在管道中使用pipe作为在您的问题中):

read.csv(pipe("tar -xOzf a.tar.gz a.csv"), colClasses = rep(c(NA, "NULL"), c(3, 5)))

2)gsubfn要对其进行参数化,可以这样写:

library(gsubfn)

Archive <- "a.tar.gz"
File <- "a.csv"

read.csv(fn$pipe("tar -xOzf $Archive $File"), colClasses = rep(c(NA, "NULL"), c(3, 5)))

3)fread data.table中的fread函数在这里也很有用。 这使用(2)中的ArchiveFile 它具有不需要知道列数的优点。 fread也可以直接处理shell命令,通常可以找出是否有标头以及分隔符是什么,并且它往往很快。

library(data.table)
library(gsubfn)

fn$fread("tar -xOzf $Archive $File", select = 1:3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM