2017-10-11 5 views
0

ファイルに何らかのテキストを書き込んだ後、データフレームを書き込む最善の方法は何ですか?テキストは変数を文字列に貼り付けることで作成されます。rテキストとデータフレームをファイルに書き込む

例所望の出力:

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) 

しかし、私

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 

私は、最初の文字で文字列を作成することができますこの2つをどのように組み合わせるのがベストかわからない。

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) 

答えて

1

恐らくこれを行うにはいくつかの方法があります。 簡単な1がfwriteを使用して、

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') 

もちろんです:

cat(out_string, file = '/tmp/test.txt') 
fwrite(x = mydf, 
    file = "/tmp/test.txt", 
    sep = ",", 
    col.names=T, 
    append=T) 
+0

これらの方法の両方が要求どおりに機能しました。ありがとうございました! – conor

1

一つのオプションは、あなたがwriteLineswrite.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" 
+0

このメソッドは、 'out_string'と' mydf'書き込みの間に行を追加し、列名を引用符で囲んで出力します。 – conor

+0

@conor 'writeLines'によって挿入された区切り記号(' out_string'にすでにあります)を削除し、 'quote = FALSE'パラメータを' write.csv'に追加するように更新しました。私は 'readr :: write_csv'を使ってそのようなものをより良いものにする傾向がありますが、それを基底Rに入れておくのは良いことです。 – alistaire

+0

ありがとうございます。 – conor

1

さらに別の方法: はファイルへの接続を開きます。

sink("<your_new_file_name>") 
out_string 
df 
sink() 
+0

適切にレンダリングするには 'cat(out_string)'が必要です。それ以外にも、要求通りに動作しますが、 'mydf'の出力には、csvではなく、スペースで整列された列があります。 1つのフォーマットが必要な場合はまだ素晴らしいです。 – conor

+0

申し訳ありませんが、回答の形式の詳細には注意を払っていませんでした。私はあなたが単に2つの出力を組み合わせたファイルを書く方法を尋ねていると思っていました。 – shea

+0

心配はいりません。私は「沈む」ことに気づいていなかったし、それがとても有用であることがわかったので、あなたの答えに感謝しています。 – conor

関連する問題