1. 軟件包介紹: xtable和flextable
這個軟件包, 主要是可以將R的對象生產(chǎn)Latex和html的格式,但是對于輸出word和直接在R中顯示支持不夠. 這樣就用到到了第二個軟件包: flextable.
flextable有很多功能, 比較好用的是它可以將xtable的格式轉(zhuǎn)化為flextable, 這樣就可以進(jìn)行圖表的可視化和結(jié)果輸出, 它可以輸出word和PPT格式, 下面以幾個示例進(jìn)行演示.
2. 軟件安裝
xtable和flextable在CRAN上, 所以通過install.packages直接安裝即可, 安裝代碼如下(去掉注釋#后執(zhí)行代碼)
# install.packages("xtable")
# install.packages("flextable")
3. 示例演示
3.1 圖表演示
這里, 我們使用一個匯總統(tǒng)計, 結(jié)果包括性狀, 最大值, 最小值, 標(biāo)準(zhǔn)差, 變異系數(shù)等, 結(jié)果是三線表的形式.
library(VSNR)
data(fm)
str(fm)
TreeID Spacing Rep Fam Plot dj dm wd h1 h2 h3 h4 h5
1 80001 3 1 70048 1 0.334 0.405 0.358 29 130 239 420 630
2 80002 3 1 70048 2 0.348 0.393 0.365 24 107 242 410 600
3 80004 3 1 70048 4 0.354 0.429 0.379 19 82 180 300 500
4 80005 3 1 70017 1 0.335 0.408 0.363 46 168 301 510 700
5 80008 3 1 70017 4 0.322 0.372 0.332 33 135 271 470 670
6 80026 3 1 70002 2 0.359 0.450 0.392 30 132 258 390 570
生成一個匯總函數(shù)
計算性狀的總個數(shù), 最大值, 最小值, 標(biāo)準(zhǔn)差, 變異系數(shù)等.
func <- function(x)(c(n = length(x),mean=mean(x,na.rm = T),max = max(x,na.rm = T), min = min(x,na.rm = T),sd=sd(x,na.rm = T),cv=sd(x,na.rm = T)/mean(x,na.rm = T)*100))
將數(shù)據(jù)重排melt
因?yàn)橐治龆鄠€性狀, 這里講性狀放到一列, 使用函數(shù)melt進(jìn)行重塑數(shù)據(jù).
library(tidyverse)
library(reshape2)
tt = melt(fm,1:5)
head(tt)
這里, 多個性狀dj, dm等性狀, 放到variable一列.
TreeID Spacing Rep Fam Plot variable value
1 80001 3 1 70048 1 dj 0.334
2 80002 3 1 70048 2 dj 0.348
3 80004 3 1 70048 4 dj 0.354
4 80005 3 1 70017 1 dj 0.335
5 80008 3 1 70017 4 dj 0.322
6 80026 3 1 70002 2 dj 0.359
a = aggregate(value~variable,tt,func)
re = cbind(type = a$variable,as.data.frame(a$value))
library(xtable)
library(flextable)
m1 = xtable_to_flextable(xtable(re))
m1
效果如下
3.2 方差分析表
mod1 = summary(aov(dj ~ Spacing + Rep + Fam, data=fm))
xtable_to_flextable(xtable(mod1))
3.3 簡單回歸分析
mod2 = summary(lm(h5 ~ dj,fm))
xtable_to_flextable(xtable(mod2))
3.4 多元回歸分析
mod3 = summary(lm(h5 ~ dj+h1 +h2 +h3 +h4,fm))
tt = xtable_to_flextable(xtable(mod3))
tt
4 結(jié)果輸出到word里面
library(officer)
doc = read_docx()
doc = body_add_flextable(doc,tt)
print(doc,"d:/tt.docx")
word中查看結(jié)果
關(guān)注我的公眾號: