【问题标题】:Write.table with a fixed number of columns具有固定列数的 Write.table
【发布时间】:2017-12-25 17:31:32
【问题描述】:

我在 R 中创建了一个非常大的数据框,我想输出一些子集并将它们保存为 csvs。但是,我只想保留列的一个子集(即 bin 和 volume)。考虑到我正在运行一个需要使用 od 字段的循环,最简单的方法是什么?

#create data frame

od    <-c("520_513", "520_513", "520_513", "520_513", "520_513", 
          "517_620", "517_620", "517_620", "517_620", "517_620")
bin   <-c(1,2,3,4,5,1,2,3,4,5)
volume<-c(1,0,4,5,6,4,4,5,6,6)

df    <-data.frame(od, bin, volume)
df1   <-split(df,df$od)

#output csvs
df1   <-for(n in names(df1))
            write.table(df1[[n]],                
                        row.names=F,
                        col.names=F, 
                        sep=",",                          
                        file=paste( n,".csv"))

这是我为 517_620 得到的输出:

od          bin        volume
--------------------------------
517_620     1            4
517_620     2            4
517_620     3            5
517_620     4            6
517_620     5            6

但我想要这个:

bin        volume
--------------------
    1         4
    2         4
    3         5
    4         6
    5         6

谢谢!

【问题讨论】:

  • write.table(df1[[n]][,2:3]write.table(df1[[n]][,c("bin", "volume")] 能完成这项工作吗?作为您编写的循环的第一行的替换,即。
  • for-loops 返回 NULL,所以永远不要这样做...df1 &lt;- for
  • 伯恩哈德,是的,这是一种享受 - 谢谢!
  • 42- 抱歉,我不明白你的意思
  • 运行该代码后,查找df1。它将不存在,因为您通过将其分配为 NULL 将其删除。

标签: r loops data.table


【解决方案1】:

假设您真的想要逗号分隔的文件而不是您说明的空格分隔,然后对您的 for-loop 进行一些修改:

for(n in names(df1))    # the assignment would destroy the df1 object
            write.table(df1[[n]][ , 2:3],    # use only cols 2 and 3           
                        row.names=F,
                        col.names=F, 
                        sep=",",                          
                        file=paste0( n,".csv"))  # change to paste0 to avoid spaces

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2018-09-11
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    相关资源
    最近更新 更多