MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

【R言語】回帰分析の結果をExcelへきれいに貼り付ける方法!手入力卒業で転記ミスゼロへ

研究者: Rでロジスティック回帰を実行したのですが、コンソール画面の summary() の数値を1つずつExcelに手入力するのが大変です。直接コピペすると1つのセルに固まって崩れてしまうのですが、簡単に綺麗な表にする方法はありますか?

統計ER: summary() の出力はただのプレーンテキストなので崩れてしまいます。神パッケージ broom::tidy() でデータフレーム化し、clipr::write_clip() を使えば、1行でExcelのセルにぴったり分かれた状態で直接貼り付けできますよ!さっそく手順を解説しましょう!

臨床研究で単変量・多変量ロジスティック回帰分析やCox比例ハザード分析、線形回帰分析を実行した際、出力された回帰係数やオッズ比(OR)、p値をどのようにExcelへ転記しているだろうか。

まさか、Rのコンソール画面を見つめながら、1数値ずつ手入力でExcelのセルに打ち込んではいないだろうか。

「1.45」「0.048」「1.12-1.88」といった数値を手作業で転記する作業は、膨大な時間がかかるだけでなく、「p = 0.048」を「0.084」と打ち間違えるような致命的なヒューマンエラー(転記ミス)を引き起こす。学内発表ならまだしも、論文提出後にデータとの齟齬を指摘されれば、査読での重大な不信感につながってしまう。

また、コンソール画面のテキストをそのままコピーしてExcelに貼り付けようとしても、1つのセルに文章ごと固まって入力され、表として機能しない経験をした方も多いはずだ。

本記事では、手入力と転記ミスから完全に解放される「Rの解析結果を一瞬でExcelのきれいな表(セル分割済み)に出力する決定版テクニック」を解説する。

前処理や転記作業などの「内職」に時間を奪われるのをやめ、研究の本質である考察や論文執筆へ貴重な時間を投資しよう。

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

目次

なぜRの標準出力 summary() はExcelにそのまま貼れないのか?

Rで線形回帰やロジスティック回帰を実行した際、最もよく使われるのが summary() 関数である。しかし、この出力結果をそのままコピーしてExcelに貼り付けると、A列の1つのセル内に文字列全体が詰め込まれて崩れてしまう。

# 例:ロジスティック回帰を実行
fit <- glm(disease ~ age + sex + sbp, data = df, family = binomial)
summary(fit)

これが起こる理由は、summary() の出力結果がデータフレーム(表形式)ではなく、画面表示用に整形された「ただのプレーンテキスト(スペース区切りの文字列)」だからである。

Excelに綺麗に貼り付けるための最大の鍵は、「Rのモデルオブジェクトを、一度綺麗なデータフレーム(tbl / data.frame)へ変換・構造化すること」にある。

解析結果をデータフレームに綺麗に変換する神パッケージ broom

モデルオブジェクトを表形式(データフレーム)に変換する際、Rユーザーの標準となっているのが broom パッケージ である。

broom::tidy() でモデルオブジェクトを一瞬で表形式にする

broom パッケージに含まれる tidy() 関数にモデル(fit)を渡すだけで、雑多なコンソール出力が列ごとに独立した美しいデータフレームへと変換される。

# パッケージの読み込み
library(tidyverse)
library(broom)

# モデル結果を綺麗なデータフレームに変換
res_df <- tidy(fit)
print(res_df)

# A tibble: 4 × 5
#   term        estimate std.error statistic  p.value
#   <chr>          <dbl>     <dbl>     <dbl>    <dbl>
# 1 (Intercept)  -3.21      0.852      -3.77  0.00016
# 2 age           0.0412    0.0125      3.30  0.00097
# 3 sexMale       0.512     0.210       2.44  0.0147 
# 4 sbp           0.0185    0.0062      2.98  0.0029

オッズ比・ハザード比と95%信頼区間を一括抽出するオプション

臨床研究でロジスティック回帰(glm)やCox回帰(coxph)を行う場合、回帰係数(対数オッズ)のままではなく、「オッズ比(OR)やハザード比(HR)」および「95%信頼区間(95% CI)」の形で取り出したいケースがほとんどである。

tidy() 関数に以下の2つのオプションを指定することで、指数変換(exp)と信頼区間の算出を一括で実行できる。

# オッズ比(OR)と95%信頼区間を一括抽出
res_or <- tidy(fit, exponentiate = TRUE, conf.int = TRUE)
print(res_or)

#  term        estimate std.error statistic p.value conf.low conf.high
#  <chr>          <dbl>     <dbl>     <dbl>   <dbl>    <dbl>     <dbl>
#1 (Intercept)   0.0403    0.852      -3.77 0.00016   0.0071     0.203
#2 age           1.04      0.0125      3.30 0.00097   1.02       1.07 
#3 sexMale       1.67      0.210       2.44 0.0147    1.11       2.53 
#4 sbp           1.02      0.0062      2.98 0.0029    1.01       1.03 
  • exponentiate = TRUE: 回帰係数を指数変換し、オッズ比(OR)やハザード比(HR)へ自動変換する。
  • conf.int = TRUE: 95%信頼区間の下限(conf.low)と上限(conf.high)を追加で出力する。

これで、データが整然と分かれた「Excelに持ち込める準備」が整った。

>>もう統計で悩むのは終わりにしませんか? 

↑1万人以上の医療従事者が購読中

Rの解析結果をExcelに流し込む3つの実践テクニック

データフレームに変換した解析結果をExcelへ持ち込むには、目的や作業環境に応じて以下の3つの手法から選択するのが最も効率的である。

手法1:【最速】clipr::write_clip() でクリップボードへ直接コピー(Ctrl+Vで貼るだけ)

一番手軽でスピード重視の方法が、Rの出力データを直接クリップボードへ転送する手法である。

clipr パッケージの write_clip() 関数を使用する。

library(clipr)

# 解析結果を直接クリップボードにコピー
fit %>% 
  tidy(exponentiate = TRUE, conf.int = TRUE) %>% 
  write_clip()

このコードを実行したら、そのまま開きっぱなしのExcelシートに切り替え、貼り付けを行いたいセルで Ctrl + V(Macなら Cmd + V を押すだけでよい。

タブ区切りの形式でクリップボードに入っているため、Excelの各セルへ完璧に分割された状態で一瞬で貼り付けが完了する。「ちょっと下書きのExcel表に数値を貼って確認したい」という日常の解析作業において最高速のテクニックである。

補足: パッケージを追加したくない場合は、Base R の write.table(res_or, "clipboard", sep = "\t", row.names = FALSE) でも同様の操作が可能である(Windows推奨)。

手法2:【確実】openxlsx::write.xlsx() でExcelファイル(.xlsx)に直接出力

解析結果を単体ファイルとして保存・保管したい場合や、再現性を保ちたい研究データの場合は、直接 .xlsx ファイルとして書き出すのが確実である。

openxlsx パッケージの write.xlsx() 関数を使用する。

library(openxlsx)

# 解析結果をデータフレーム化
res_df <- tidy(fit, exponentiate = TRUE, conf.int = TRUE)

# Excelファイル(.xlsx)として保存
write.xlsx(res_df, file = "logistic_regression_results.xlsx")

実行すると、作業ディレクトリ内に整然としたExcelファイルが生成される。手入力を完全に介さないため、チーム内でのデータ共有や将来の解析再再現時にも不整合が起こらない。

手法3:【論文完成形】gtsummary パッケージでそのまま論文に載るテーブルを作成

「ただの数値をExcelに送るだけでなく、論文の Table 2 にそのまま使えるレベルで美しくレイアウトされた表を作りたい」という場合には、医療統計で絶大な支持を得ている gtsummary パッケージ が第一選択となる。

gtsummary::tbl_regression() を使うと、変数名のラベル表示、参照群(Reference)の自動挿入、p値の小点数切り捨て処理などが自動で適用される。

library(gtsummary)

# 論文用の高品質テーブルを作成
table_output <- fit %>% 
  tbl_regression(exponentiate = TRUE) %>% 
  add_global_p() # グローバルp値の追加など

# Excel(またはWord)へエクスポート
table_output %>% 
  as_hux_table() %>% 
  huxtable::quick_xlsx("Table2_Regression_Results.xlsx")

この方法を用いれば、フォントや罫線の整った「ほぼ論文提出完成形」の表がそのままExcel形式で手に入る。

論文投稿を見据えた「オッズ比 (95% CI)」の文字列一括整形テクニック

医学論文のTable 2などでは、「オッズ比(estimate)」「下限(conf.low)」「上限(conf.high)」が別々の列に分かれている表よりも、1.45 (1.12-1.88) のように1つの列(文字列)にまとまった形式が求められることが多い。

Excelに流し込む前の段階で、R上で数値の丸め(四捨五入)と文字列結合を一括処理しておくと、転記後の手作業による編集コストが完全にゼロになる。

library(tidyverse)
library(broom)
library(clipr)

# 論文用に一括整形するパイプライン
table_for_paper <- fit %>% 
  tidy(exponentiate = TRUE, conf.int = TRUE) %>% 
  # 切片(Intercept)を除外したい場合はフィルタリング
  filter(term != "(Intercept)") %>% 
  mutate(
    # 数値を小数点以下2桁(または適宜)に揃える
    OR   = sprintf("%.2f", estimate),
    LCI  = sprintf("%.2f", conf.low),
    UCI  = sprintf("%.2f", conf.high),
    
    # "1.45 (1.12-1.88)" の形式に一括結合
    `OR (95% CI)` = str_c(OR, " (", LCI, "-", UCI, ")"),
    
    # p値の整形(0.001未満は "<0.001" と表記)
    `p value` = ifelse(p.value < 0.001, "<0.001", sprintf("%.3f", p.value))
  ) %>% 
  # 必要な列だけを抽出して整列
  select(Variable = term, `OR (95% CI)`, `p value`)

# クリップボードへコピー(Excelへ即貼り付け可能!)
write_clip(table_for_paper)

この処理を実行した後にExcelで Ctrl + V を押せば、投稿論文にそのまま掲載できるフォーマット(変数名 / OR (95% CI) / p value)が一瞬で完成する。

【まとめ】手入力ゼロで転記ミスのない論文執筆へ

今回紹介した「RからExcelへ直接流し込むフロー」を一度構築してしまえば、手入力に頼っていた従来の作業がいかにリスクが高く、無駄な時間であったかに気づくだろう。

  • 最速で確認・作業したい時:tidy(fit, exponentiate = TRUE, conf.int = TRUE)clipr::write_clip() でExcelへ貼り付け
  • 成果物・保存データとしたい時:openxlsx::write.xlsx().xlsx ファイル書き出し
  • 論文用の完成表を作りたい時:gtsummary::tbl_regression() または sprintf() による一括文字列結合

「画面を見ながら打ち込む内職時間」を完全に削減し、手入力ミスの恐怖から解放された状態で、研究のデータ考察や論文執筆へ集中していこう。

おすすめ書籍

いちばんやさしい、医療統計 改訂版〜図解ですんなりわかる統計の基本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

コメント

コメントする

目次