我正在使用tabular
包中的tables
函数来获取“df”数据帧的摘要表。我需要获得一个可以处理的输出,以获得具有多个单元格功能的Latex表。
下面是虚拟“df”数据帧:
age <- c(62, 60, 63, 59, 63, 67, 71, 64, 65, 66, 68, 66, 71, 67, 68, 68, 56, 62, 60, 61, 63, 64, 63, 59)
L3 <- factor(rep(paste(LETTERS[7:16], LETTERS[7:16], LETTERS[7:16], sep=""), c(1,3,2,1,3,5,1,1,6,1)))
L2 <- factor(rep(paste(LETTERS[3:6], LETTERS[3:6], sep=""), c(4,6,6,8)))
L1 <- factor(rep(LETTERS[1:2], c(10,14)))
df <- data.frame(Top=L1, Mid=L2, Low=L3, Age=age, stringsAsFactors=F)
我使用以下R命令行来生成摘要表:
tabular( (Top*Mid*Low*DropEmpty()) ~ (CL3=1) + (Age)*(Format(digits=2, latex=T)*mean + Format(digits=3, latex=T)*sd), data=df)
使用此命令行生成的摘要表如下:
Age
Top Mid Low CL3 mean sd
A CC GGG 1 62 NA
HHH 3 61 2.08
DD III 2 65 2.83
JJJ 1 71 NA
KKK 3 65 1.00
B EE LLL 5 68 1.87
MMM 1 68 NA
FF NNN 1 56 NA
OOO 6 62 1.47
PPP 1 59 NA
标题:CL3是一个简短的名字,意思是“在3级计数”(即:中上半部组合)。
但我想得到这个(2个额外的计数列(CL1和CL2)分别在“Top”和“Mid”级别):
Age
Top CL1 Mid CL2 Low CL3 mean sd
A 10 CC 4 GGG 1 62 NA
HHH 3 61 2.08
DD 6 III 2 65 2.83
JJJ 1 71 NA
KKK 3 65 1.00
B 14 EE 6 LLL 5 68 1.87
MMM 1 68 NA
FF 8 NNN 1 56 NA
OOO 6 62 1.47
PPP 1 59 NA
标题:CL1,CL2,CL3只是短名称,意思是“在x级计数”(x代表Top,Top-Mid,Top-Mid-Low组合)。
那么,你能帮我弄清楚如何使用tabular
包的tables
函数来解决这个问题吗?我需要使用此函数,或至少任何其他可以输出Latex代码处理多单元格功能的函数(例如:xtable
或bytable
taRifx
包),因为我想输出该表的图片(.EMF或.SVG或.JPG),以verticaly为中心的多行单元格。
答案 0 :(得分:1)
表格似乎不支持嵌套公式 - 即尝试执行((Top~(CL1=1))*(Mid~(CL2=1))*Low*DropEmpty())
会引发有关嵌套公式的错误。因此,一个想法可能是在使用tabular
类似的东西:
df$CL1 <- factor(ave(as.character(df$Top), as.character(df$Top), FUN = length))
df$CL2 <- factor(ave(as.character(df$Mid), as.character(df$Mid), FUN = length))
tabular( (Top*CL1*Mid*CL2*Low*DropEmpty()) ~ (CL3=1) + (Age)*(Format(digits=2, latex=T)*mean + Format(digits=3, latex=T)*sd), data=df)
#Top CL1 Mid CL2 Low CL3 mean sd
#A 10 CC 4 GGG 1 62 NA
# HHH 3 61 2.08
# DD 6 III 2 65 2.83
# JJJ 1 71 NA
# KKK 3 65 1.00
#B 14 EE 6 LLL 5 68 1.87
# MMM 1 68 NA
# FF 8 NNN 1 56 NA
# OOO 6 62 1.47
# PPP 1 59 NA
答案 1 :(得分:1)
以下是使用dplyr
和(我的)huxtable
包的内容:
library(huxtable)
library(dplyr)
# prepare summaries:
df_sum <- df %>%
group_by(Top) %>% mutate(CL1 = n()) %>%
group_by(Mid, add = TRUE) %>% mutate(CL2 = n()) %>%
group_by(Low, add = TRUE) %>% mutate(CL3 = n()) %>%
summarize(
mean = mean(Age),
sd = sd(Age),
CL1 = CL1[1],
CL2 = CL2[1],
CL3 = CL3[1]
) %>%
select(Top, CL1, Mid, CL2, Low, CL3, mean, sd)
# format for LaTeX/HTML output:
hux_sum <- as_hux(df_sum)
rowspan(hux_sum)[c(1,6), 1:2] <- 5
rowspan(hux_sum)[c(1,3,6,8), 3:4] <- c(2,3,2,3)
number_format(hux_sum)[, 1:6] <- 0
hux_sum