xtableの加工

Rにおいて次の計算をかんがえる.

x = rnorm(100)
y = x + runif(100)
result <- lm(y ~ x)
summary(result)

## 
## Call:
## lm(formula = y ~ x)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.4939 -0.2343  0.0235  0.1904  0.4772 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   0.5048     0.0279    18.1   <2e-16 ***
## x             0.9947     0.0319    31.2   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.278 on 98 degrees of freedom
## Multiple R-squared:  0.908,  Adjusted R-squared:  0.907 
## F-statistic:  971 on 1 and 98 DF,  p-value: <2e-16

計算結果をこれをLaTeXに出力するにはパッケージxtableをつかえばよい.

library(xtable)
xtable(result)

## % latex table generated in R 3.0.2 by xtable 1.7-1 package
## % Mon Jan 20 13:11:08 2014
## \begin{table}[ht]
## \centering
## \begin{tabular}{rrrrr}
##   \hline
##  & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ 
##   \hline
## (Intercept) & 0.5048 & 0.0279 & 18.09 & 0.0000 \\ 
##   x & 0.9947 & 0.0319 & 31.16 & 0.0000 \\ 
##    \hline
## \end{tabular}
## \end{table}

ちなみにhtml出力は以下である.

print(xtable(result), type = "html", sanitize.text.function = identity)

Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.4849 0.0311 15.60 0.0000
x 1.0461 0.0330 31.68 0.0000

最後のオプションを付けないと, 以下のように「>」が上手く表記されない.

print(xtable(result), type = "html")

Estimate Std. Error t value Pr(&gt |t|)
(Intercept) 0.5048 0.0279 18.09 0.0000
x 0.9947 0.0319 31.16 0.0000

ただ, xtableの結果をこのままつかうのでなく, いろいろファイルを色々加工したいことがある. 桁数や表記の名前などはコマンドで修正できるが, フォントを変えたりするには工夫が必要である.

たとえば桁数を縮めて最初の行を太字にしたければ以下のようにすればよい.

xtab <- summary(result)$coefficients
xtab[] <- as.character(round(xtab, digits = 3))
xtab[, 1] <- paste("\\textbf{", xtab[, 1], "}", sep = "")
print(xtable(xtab), sanitize.text.function = identity)

## % latex table generated in R 3.0.2 by xtable 1.7-1 package
## % Mon Jan 20 13:11:08 2014
## \begin{table}[ht]
## \centering
## \begin{tabular}{rllll}
##   \hline
##  & Estimate & Std. Error & t value & Pr(>|t|) \\ 
##   \hline
## (Intercept) & \textbf{0.505} & 0.028 & 18.094 & 0 \\ 
##   x & \textbf{0.995} & 0.032 & 31.158 & 0 \\ 
##    \hline
## \end{tabular}
## \end{table}

ちなみにhtml出力は以下である.

xtab <- summary(result)$coefficients
xtab[] <- as.character(round(xtab, digits = 3))
xtab[, 1] <- paste("<b>", xtab[, 1], "</b>", sep = "")
print(xtable(xtab), type = "html", sanitize.text.function = identity)

Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.505 0.028 18.094 0
x 0.995 0.032 31.158 0

通常の論文だと, アステリスクをつけることが多い. この場合, 以下のようにコードを入力すればよい.

xtab <- summary(result)$coefficients
xtab[] <- as.character(round(xtab, digits = 3))

xtab[, 1] <- 
    ifelse(as.numeric(xtab[, 4]) < 0.01, paste(xtab[, 1], "***", sep = ""), 
    ifelse(as.numeric(xtab[, 4]) < 0.05, paste(xtab[, 1], "**", sep = ""), 
    ifelse(as.numeric(xtab[, 4]) < 0.1, paste(xtab[, 1], "*", sep = ""),
    xtab[, 1])))
print(xtable(xtab))

## % latex table generated in R 3.0.2 by xtable 1.7-1 package
## % Mon Jan 20 13:25:54 2014
## \begin{table}[ht]
## \centering
## \begin{tabular}{rllll}
##   \hline
##  & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ 
##   \hline
## (Intercept) & 0.537*** & 0.031 & 17.421 & 0 \\ 
##   x & 0.954*** & 0.036 & 26.24 & 0 \\ 
##    \hline
## \end{tabular}
## \end{table}

ちなみにhtml出力は以下である.

print(xtable(xtab), type = "html", sanitize.text.function = identity)

Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.537*** 0.031 17.421 0
x 0.954*** 0.036 26.24 0

こうして作成したコードをtexファイルにコピペするか, ファイルとして保存してインクルードするか, Sweaveやknitrでつかえばよい.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中