2016-06-14 7 views
1

現在、私は現在、ユーザーに触発された次のコードチャンク/関数を使用してRマークダウンファイルをPDFに編み込んでいます。Carlos Cinelli重なり合った列の編み方RマークダウンからPDFへ

```{r set-options, echo = FALSE, results = 'asis'} 
rmarkdownTable <- function(df){ 
    cat(paste(names(df), collapse = "|")) 
    cat("\n") 
    cat(paste(rep("-", ncol(df)), collapse = "|")) 
    cat("\n") 

    for(i in 1:nrow(df)){ 
    cat(paste(df[i,], collapse = "|")) 
    cat("\n") 
    } 
invisible(NULL) 
} 

rmarkdownTable(CurrentTableData) 
``` 

CurrentTableDataがそうでなければ1つの文字クラスの列(ID)と数値クラス列のdata.frameです:カスタム値下げ機能は次のとおりです。私はすでにこの機能を使って、他のデータフレームをPDF、html、Wordに問題なくレンダリングしています。

ただし、CurrentTableDataで実行すると、出力テーブルがスクロールアップされ、列/列タイトルがすべて重複します。私は(再現用dputに)持っているデータを示すために、次のことをプリントアウトし、私はに実行している問題ました:

CurrTableDataList <- dput(head(CurrentTableData)) 

structure(list(ASIN = c("B0000004Y8", "B000000OQI", "B000000XB8", 
"B0000017CI", "B000001A3H", "B000001ELB"), `NewPrice USD` = c("34.77", 
"27.61", "21.49", "14.13", "16.49", "14.61"), `CurrentPrice USD` = c("43.50", 
"35.98", "24.98", "12.98", "19.98", "19.98"), `FBAfees USD` = c("8.72", 
"7.56", "6.68", "5.53", "5.88", "5.60"), `AddFees USD` = c("4.80", 
"3.82", "2.97", "1.96", "2.28", "2.01"), `Cost USD` = c("20.78", 
"14.63", "10.09", "6.48", "6.95", "5.30"), `AllFees USD` = c("34.30", 
"26.01", "19.74", "13.97", "15.11", "12.91"), `NewProfit USD` = c("0.47", 
"1.60", "1.75", "0.16", "1.38", "1.70"), `NewProfit CAD` = c("0.60", 
"2.05", "2.24", "0.21", "1.77", "2.18"), `CurrentProfit CAD` = c("3.27", 
"1.48", "1.81", "1.53", "1.56", "0.52"), `New % Profit` = c("2.25", 
"10.93", "17.32", "2.53", "19.87", "32.11"), `Current % Profit` = c("22.22", 
"8.22", "14.55", "18.43", "18.22", "7.91"), SalesRank = c(10153, 
4809, 550, 13569, 6647, 5164)), .Names = c("ASIN", "NewPrice USD", 
"CurrentPrice USD", "FBAfees USD", "AddFees USD", "Cost USD", 
"AllFees USD", "NewProfit USD", "NewProfit CAD", "CurrentProfit CAD", 
"New % Profit", "Current % Profit", "SalesRank"), row.names = c(NA, 
6L), class = "data.frame") 

サンプル問題出力:として

Overlapping Columns Output

上記の問題の出力は列名をラップしていましたが、私の以前の出力は(必ずしも悪いことではありませんでしたが、私が気づいたことですが - マークダウン関数に変更はなく、列名は他の出力)。私は、オプション(width = #some number)と出力を使ってリサイズを試みました。pdf_document:ページ上の列の配置/配置に役立つことが期待される次元ですが、運はありません。

私はRバージョン3.3.0(2016-05-03)で、x86_64-apple-darwin13.4.0(64-bit)を実行しています。

+0

独自の機能を使用しますか?これは、同じ名前のパッケージから、例えば 'xtable()'を使うことでより簡単に達成できます。 – Alex

答えて

1

列のサイズを制御する方法は、-記号を超えています。それを明確にするために:

ASIN|NewPrice USD|CurrentPrice USD|FBAfees USD|AddFees USD|Cost USD|AllFees USD|NewProfit USD|NewProfit CAD|CurrentProfit CAD|New % Profit|Current % Profit|SalesRank 
-|-|-|-|-|-|-|-|-|-|-|-|- 
B0000004Y8|34.77|43.50|8.72|4.80|20.78|34.30|0.47|0.60|3.27|2.25|22.22|10153 
B000000OQI|27.61|35.98|7.56|3.82|14.63|26.01|1.60|2.05|1.48|10.93|8.22|4809 
B000000XB8|21.49|24.98|6.68|2.97|10.09|19.74|1.75|2.24|1.81|17.32|14.55|550 
B0000017CI|14.13|12.98|5.53|1.96|6.48|13.97|0.16|0.21|1.53|2.53|18.43|13569 
B000001A3H|16.49|19.98|5.88|2.28|6.95|15.11|1.38|1.77|1.56|19.87|18.22|6647 
B000001ELB|14.61|19.98|5.60|2.01|5.30|12.91|1.70|2.18|0.52|32.11|7.91|5164 

enter image description here

ASIN|NewPrice USD|CurrentPrice USD|FBAfees USD|AddFees USD|Cost USD|AllFees USD|NewProfit USD|NewProfit CAD|CurrentProfit CAD|New % Profit|Current % Profit|SalesRank 
-------------|-|-|-|-|-|-|-|-|-|-|-|- 
B0000004Y8|34.77|43.50|8.72|4.80|20.78|34.30|0.47|0.60|3.27|2.25|22.22|10153 
B000000OQI|27.61|35.98|7.56|3.82|14.63|26.01|1.60|2.05|1.48|10.93|8.22|4809 
B000000XB8|21.49|24.98|6.68|2.97|10.09|19.74|1.75|2.24|1.81|17.32|14.55|550 
B0000017CI|14.13|12.98|5.53|1.96|6.48|13.97|0.16|0.21|1.53|2.53|18.43|13569 
B000001A3H|16.49|19.98|5.88|2.28|6.95|15.11|1.38|1.77|1.56|19.87|18.22|6647 
B000001ELB|14.61|19.98|5.60|2.01|5.30|12.91|1.70|2.18|0.52|32.11|7.91|5164 

enter image description here

私はあなたの機能ビットを調整する:

rmarkdownTable <- function(df, x){ 
    cat(paste(names(df), collapse = "|")) 
    cat("\n") 
    col_length <- function(x) paste(rep('-', x), collapse = '') 
    cat(paste(sapply(x,col_length), collapse = "|")) 
    cat("\n") 

    for(i in 1:nrow(df)){ 
    cat(paste(df[i,], collapse = "|")) 
    cat("\n") 
    } 
invisible(NULL) 
} 

の長さを持つべきであるベクトルxを、あなたが持っている列の数、関数の数を教えてください-それは各列に含まれるものとする。

備考:表が1ページに収まるように大きくすると、-記号の比率が重要になるようです。したがって、各列に1000 -がある場合と同じように見えます。各列が1つしかない場合は-です。

詳細備考:xtableのようなパッケージを使用することをお勧めします。それはかなり良い仕事をし、あなたのためのより少ない仕事です。

+0

偉大な、徹底的な答え:私はコードの編集に感謝し、間違いなく将来の使用のために 'xtable()'を見ています。ありがとうございました! –

関連する問題