从数据框写一个gzip文件

scr*_*Owl 9 compression zip gzip r vowpalwabbit

我正在尝试将数据帧写入gzip文件但有问题.

这是我的代码示例:

df1 <- data.frame(id = seq(1,10,1), var1 = runif(10), var2 = runif(10))

gz1 <- gzfile("df1.gz","w" )
writeLines(df1)
Run Code Online (Sandbox Code Playgroud)

错误writeLines(df1):无效的'text'参数

有什么建议?

编辑:我想写的字符向量的示例行是:

0 | var1:1.5 var2:.55 var7:1250
Run Code Online (Sandbox Code Playgroud)

类标签/ y变量通过"|"与x-vars分隔,变量名通过":"与变量之间的空格分隔.

EDIT2:我为问题的措辞/格式道歉,但结果如下:旧方法:

system.time(write(out1, file="out1.txt"))
#    user  system elapsed 
#   9.772  17.205  86.860 
Run Code Online (Sandbox Code Playgroud)

新方法:

writeGzFile <- function(){
  gz1 = gzfile("df1.gz","w");
  write(out1, gz1);
  close(gz1) 
}

system.time( writeGzFile())
#    user  system elapsed 
#   2.312   0.000   2.478 
Run Code Online (Sandbox Code Playgroud)

非常感谢大家帮助我解决这个问题.

use*_*691 19

writeLines需要一个字符串列表.将此写入gzip文件的最简单方法是

df1 <- data.frame(id = seq(1,10,1), var1 = runif(10), var2 = runif(10))
gz1 <- gzfile("df1.gz", "w")
write.csv(df1, gz1)
close(gz1)
Run Code Online (Sandbox Code Playgroud)

这将把它写成一个gzip压缩文件.另请参阅write.table以及write.csv2将文件写出的其他方法.

编辑:基于有关所需格式的帖子的更新,我做了以下帮助(快速抛出,可能承认大量的简化):

function(df) {
    rowCount <- nrow(df)
    dfNames <- names(df)
    dfNamesIndex <- length(dfNames)
    sapply(1:rowCount, function(rowIndex) {
        paste(rowIndex, '|', 
            paste(sapply(1:dfNamesIndex, function(element) {
                c(dfNames[element], ':', df[rowIndex, element])
            }), collapse=' ')
        )
    })
}
Run Code Online (Sandbox Code Playgroud)

所以输出看起来像

a <- data.frame(x=1:10,y=rnorm(10))
writeLines(myser(a))
# 1 | x : 1 y : -0.231340933021948
# 2 | x : 2 y : 0.896777389870928
# 3 | x : 3 y : -0.434875004781075
# 4 | x : 4 y : -0.0269824962632977
# 5 | x : 5 y : 0.67654540494899
# 6 | x : 6 y : -1.96965253674725
# 7 | x : 7 y : 0.0863177759402661
# 8 | x : 8 y : -0.130116466571162
# 9 | x : 9 y : 0.418337557610229
# 10 | x : 10 y : -1.22890714891874
Run Code Online (Sandbox Code Playgroud)

所有必要的是将gzfile传递给writeLines以获得所需的输出.


Spa*_*man 5

要将某些内容写入 gzip 文件,您需要将其“序列化”为文本。对于 R 对象,您可以使用以下方法来尝试dput

gz1 = gzfile("df1.gz","w")
dput(df1, gz1)
close(gz1)
Run Code Online (Sandbox Code Playgroud)

但是,您刚刚将数据框的文本表示形式写入文件。这很可能比使用save(df1,file="df1.RData")将其保存到本机 R 数据文件的效率要低。问问自己:为什么我要把它保存为 .gz 文件?

在使用一些随机数的快速测试中,gz 文件为 54k,.RData 文件为 34k


Gor*_*rka 5

另一种非常简单的方法是:

# We create the .csv file
write.csv(df1, "df1.csv")

# We compress it deleting the .csv
system("gzip df1.csv")
Run Code Online (Sandbox Code Playgroud)

从以下地方得到这个想法:http://blog.revolutionanalytics.com/2009/12/r-tip-save-time-and-space-by-compressing-data-files.html