【问题标题】:How do I write a csv file in R, where my input is written to the file as row?如何在 R 中编写一个 csv 文件,其中我的输入作为行写入文件?
【发布时间】:2013-12-01 04:06:16
【问题描述】:

这是一个非常简单的问题,我很惊讶网上没有例子。

我有一个向量:

vector <- c(1,1,1,1,1)

我想把它写成一个简单的行:

write.csv(vector, file ="myfile.csv", row.names=FALSE)

当我打开刚刚编写的文件时,csv 被写入为一列值。 就好像 R 决定在每个数字 1 之后加入换行符。

请原谅我的无知,但我一直认为使用逗号分隔值的目的是表达从左到右的值序列,由逗号分隔。有点像我刚刚做的;在某种意义上模仿书面文字的语法。当一个 csv 显然应该是一行时,为什么 R 如此拼命地坚持列格式?

抛开所有语言哲学,我尝试使用转置功能。我已经翻阅了文档。请帮忙!谢谢。

【问题讨论】:

  • 五个答案,没有一个建议:使用cat
  • 为什么不提出第六个答案?

标签: r csv


【解决方案1】:

write.csv 是为矩阵设计的,R 将单个向量视为具有单列的矩阵。试着把它做成一个单行多列的矩阵,它应该可以按你的预期工作。

write.csv(matrix(vector, nrow=1), file ="myfile.csv", row.names=FALSE)

不确定您使用转置功能尝试了什么,但这应该也可以。

write.csv(t(vector), file ="myfile.csv", row.names=FALSE)

【讨论】:

    【解决方案2】:

    这就是我所做的:

    cat("myVar <- c(",file="myVars.r.txt", append=TRUE);
    
    cat( myVar,       file="myVars.r.txt", append=TRUE, sep=", ");
    
    cat(")\n",        file="myVars.r.txt", append=TRUE);
    

    这会生成一个文本文件,该文件可以在另一天立即重新加载到 R 中,使用:

    source("myVars.r.txt")
    

    【讨论】:

      【解决方案3】:

      按照@Matt 所说的,如果你想要一个csv,试试eol=","

      【讨论】:

        【解决方案4】:

        我试过这个:

        write.csv(rbind(vector), file ="myfile.csv", row.names=FALSE)
        

        输出是按列写入的,但是带有列名。

        这个好像更好:

        write.table(rbind(vector), file = "myfile.csv", row.names =FALSE, col.names = FALSE,sep = ",")
        

        现在,输出被打印为:

        1   1   1   1   1
        

        在 .csv 文件中,没有列名。

        【讨论】:

          【解决方案5】:

          write.table(vector, "myfile.csv", eol=" ", row.names=FALSE, col.names=FALSE)

          您可以简单地将 eol 更改为您想要的任何值。在这里,我把它变成了一个空间。

          【讨论】:

            【解决方案6】:

            您可以使用cat 将行追加到文件中。以下代码会将向量作为一行写入文件:

            myVector <- c("a","b","c")
            cat(myVector, file="myfile.csv", append = TRUE, sep = ",", eol = "\n")
            

            这将生成一个以逗号分隔的文件,但每行都有尾随逗号,因此它不是 CSV 文件。

            如果您想要真正的 CSV 文件,请使用@vamosrafa 提供的解决方案。代码如下:

            write.table(rbind(myVector), file = "myfile.csv", row.names =FALSE, col.names = FALSE,sep = ",", append = TRUE)
            

            输出将是这样的:

            "a","b","c"
            

            如果函数被多次调用,它会在文件中添加行。

            【讨论】:

              【解决方案7】:

              还有一个:

              write.table(as.list(vector), file ="myfile.csv", row.names=FALSE, col.names=FALSE, sep=",")
              

              【讨论】:

                【解决方案8】:

                从 data.table 包中写入也是另一种选择:

                library(data.table)
                
                vector <- c(1,1,1,1,1)
                fwrite(data.frame(t(vector)),file="myfile.csv",sep=",",row.names = FALSE)
                

                【讨论】:

                  猜你喜欢
                  • 2022-11-03
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-06-29
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多