2017-08-28 6 views
0

私はパネルデータの回帰の出力を含むマトリックスを持っていますR.R - (write.xlsx停止)構文的に有効な列名を作るから

xlsxパッケージのwrite.xlsx()機能に関する具体的な質問を持っています。便宜上、これらの出力をWord文書に含めるために.xlsxファイルにエクスポートしたいと考えています。しかし、write.xlsxで行列をエクスポートすると、列名はポイント、文字、数字以外の記号がない構文的に有効なスタイルに自動的に編集されます。だから、行列の列ベクトル

table_columns <- c("Estimate (All periods)", "", "s.e. (All periods)", "Estimate (Periods 0 & 1)", "", "s.e. (Periods 0 & 1)")

(これらの列は、p値のための星の指標が含まれているため""が空の列名です) は

Estimate..All.periods.|V2|s.e...All.periods.|Estimate..Periods.0...1.|V5|s.e...Periods.0...1.

なりはする方法はあります出力後に.xlsxファイルを編集する必要がないようにこの再フォーマットを抑制しますか?私はこれらがのdimnamesを設定するために使用されているc("(1) 1AM - 6AM", "", "(2) 6AM - 10AM", "", "(3) 10AM - 6PM", "", "(4) 6PM - 10PM", "", "(5) 10PM - 1AM", "", "(6) Daily", "")

c("All periods", " Std. error (All periods)", "Periods 0 & 1", " Std. error (Periods 0 & 1)") とベクトルtable_columnsとベクトルtable_rowsを持っているん

-Edit-理解し、物事を容易にするために、マトリックスtablematrix(c(table_1, table_1p, table_2, table_2p, table_3, table_3p, table_4, table_4p, table_5, table_5p, table_6, table_6p), 4, 12, dimnames = list(table4_rows, table4_columns))

ここで、table_oddtable_oddpは、推定値とそれらのp値のインジケータを含む列ベクトルを示し、table_evenは標準誤差を表しています。全てのベクターは、私はあなたがwrite.xlsx woはそれを渡す前に、データフレームに行列を変換する必要があり

+3

を[再現性の例](https://stackoverflow.com/questions/5963269/how-to-make-a-greatを入力してください-r-reproducible-example)である。どのように正確に 'write.xlsx'を呼びますか?フォーマットされたデータを書き込もうとしているdata.frameとはどのくらい正確ですか。 'table_columns'ベクターで何をしていますか? – MrFlick

+0

私は 'xlsx'がインストールされていないので、私は検証しませんでしたが、私の推測はこれです:あなたは' matrix'オブジェクトに対して 'write.xlsx'を呼び出します。その後、内部的に 'data.frame'([46行目と47行目(https://github.com/cran/xlsx/blob/master/R/write.xlsx.R)を参照)に変換され、実行されますあなたのカラム名に 'make.names()' 'write.xlsx'に既に' data.frame'であるオブジェクトを 'column.xlsx'に渡して、あなたが望むようにカラム名を渡すと、あなたの問題を解決できます。 – Gregor

答えて

0

を.XLSXする行列を変換するwrite.xlsx(table, paste0(getwd(), "/results.xlsx"), sheetName = "Results")を実行しないタイプのchr

です。それ以外の場合は、write.xlsxはデフォルト引数でジョブを実行します。ただし、構文チェックを無効にして空の列名を置き換えるには、check.names=Ffix.empty.names=Fを設定する必要があります。ここで

reproducible exampleだ - このような将来の質問投稿してください。

library(xlsx) 
table_rows <- c("All periods", " Std. error (All periods)", "Periods 0 & 1", " Std. error (Periods 0 & 1)") 
table_columns <- c("(1) 1AM - 6AM", "", "(2) 6AM - 10AM", "", "(3) 10AM - 6PM", "", "(4) 6PM - 10PM", "", "(5) 10PM - 1AM", "", "(6) Daily", "") 
m <- matrix(seq_len(4*12), 4, 12, dimnames = list(table_rows, table_columns)) 
# convert matrix to list so that one can use as.data.frame's fix.empty.names=F: 
df <- as.data.frame(setNames(lapply(1:ncol(m), function(x) m[, x]), colnames(m)), check.names=F, fix.empty.names = F) 
write.xlsx(df, tf <- tempfile(fileext = ".xlsx")) 
shell.exec(tf) 
+0

これはうまくいきましたが、Gregorsのコメントの結果として 'table < - as.data.frame(table、optional = TRUE) 'を使って修正しました。 '' ''を '' ''(スペースを挟んで)に変更して、これらの列の名前が '' V2 ''に変更されないようにしました。 – Icipher

+0

@Icipherしかし、それは 'fix.empty.names'ではなく' check.names'にのみ影響します。列名の名前を変更することは、もうちょっとハックアップするようです。 ;) – lukeA

+0

'fix.empty.names'は' table < - as.data.frame(table、optional = TRUE、fix.empty.names = FALSE) 'にインクルードすると動作しません。この場合、列の名前は「V2」などとなります。 – Icipher

関連する問題