代码之家  ›  专栏  ›  技术社区  ›  conor

r将文本和数据帧写入文件

  •  4
  • conor  · 技术社区  · 7 年前

    向文件中写入一些文本并后跟数据框的最佳方式是什么?文本是通过将变量粘贴到字符串中创建的。

    期望输出示例:

    Here is some text.
    This line has a variable: Hello World
    Data frame below the line
    =================
    ID,val1,val2
    1,2,3
    2,4,6
    3,6,9
    4,8,12
    5,10,15
    6,12,18
    7,14,21
    8,16,24
    9,18,27
    10,20,30
    

    我可以用初始文本创建一个字符串:

    myvar <- "Hello World"
    out_string <- paste0("Here is some text.\n",
                         "This line has a variable: ", myvar, "\n",
                         "Data frame below the line\n",
                         "=================\n")
    cat(out_string)
    

    我可以将数据帧写入文件:

    library(data.table)
    
    mydf <- data.frame(ID = 1:10, val1 = 1:10*2, val2 = 1:10*3)
    
    fwrite(x = mydf,
       file = "path/file.txt",
       sep = ",",
       col.names=T)
    

    但我不确定如何最好地将这两者结合起来。

    我认为只需将数据框粘贴到 out_string 然后将其写入文件将是最好的,但我的尝试失败了,例如。

    cat(paste0(out_string, mydf, collapse=''))
    # Here is some text.
    # This line has a variable: Hello World
    # Data frame below the line
    # =================
    #   1:10Here is some text.
    # This line has a variable: Hello World
    # Data frame below the line
    # =================
    #   c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)Here is some text.
    # This line has a variable: Hello World
    # Data frame below the line
    # =================
    #   c(3, 6, 9, 12, 15, 18, 21, 24, 27, 30)
    
    3 回复  |  直到 7 年前
        1
  •  6
  •   spadarian    7 年前

    一个简单的例子是

    cat(out_string, file = '/tmp/test.txt')
    cat(paste0(colnames(mydf), collapse = ','), file = '/tmp/test.txt', append = T, sep = '\n')
    cat(apply(mydf,1,paste0, collapse=','), file = '/tmp/test.txt', append = T, sep = '\n')
    

    当然,使用 fwrite :

    cat(out_string, file = '/tmp/test.txt')
    fwrite(x = mydf,
       file = "/tmp/test.txt",
       sep = ",",
       col.names=T,
       append=T)
    
        2
  •  2
  •   shea    7 年前

    还有一种方式: sink() 将打开到文件的连接。

    sink("<your_new_file_name>")
    out_string
    df
    sink()
    
        3
  •  2
  •   alistaire    7 年前

    writeLines write.csv :

    myvar <- "Hello World"
    out_string <- paste0("Here is some text.\n",
                         "This line has a variable: ", myvar, "\n",
                         "Data frame below the line\n",
                         "=================\n")
    mydf <- data.frame(ID = 1:10, val1 = 1:10*2, val2 = 1:10*3)
    
    
    my_file <- file('file.csv', 'w')
    
    writeLines(out_string, my_file, sep = '')
    write.csv(mydf, my_file, quote = FALSE, row.names = FALSE)
    
    close(my_file)
    
    readLines('file.csv')
    #>  [1] "Here is some text."                   
    #>  [2] "This line has a variable: Hello World"
    #>  [3] "Data frame below the line"            
    #>  [4] "================="                    
    #>  [5] "ID,val1,val2"                         
    #>  [6] "1,2,3"                                
    #>  [7] "2,4,6"                                
    #>  [8] "3,6,9"                                
    #>  [9] "4,8,12"                               
    #> [10] "5,10,15"                              
    #> [11] "6,12,18"                              
    #> [12] "7,14,21"                              
    #> [13] "8,16,24"                              
    #> [14] "9,18,27"                              
    #> [15] "10,20,30"