具有累积计数/百分比和使用R";表格「;包裹
我试图生成一个格式化的html表,其中包含频率、累计频率、列百分比和累计列百分比列。该表还应具有分组变量的数据子集,并包括组总数 我几乎可以使用dplyr和tidyr的组合来实现这一点,但是输出是一个看起来不太漂亮的数据帧。我想知道是否有更简单的方法使用具有累积计数/百分比和使用R";表格「;包裹,r,html-table,tabular,cumulative-sum,R,Html Table,Tabular,Cumulative Sum,我试图生成一个格式化的html表,其中包含频率、累计频率、列百分比和累计列百分比列。该表还应具有分组变量的数据子集,并包括组总数 我几乎可以使用dplyr和tidyr的组合来实现这一点,但是输出是一个看起来不太漂亮的数据帧。我想知道是否有更简单的方法使用tables::tablate命令 # Sample data dat <- data.frame( id = 1:100, group = factor(sample(c("A", "B"), 100, replace = TR
tables::tablate
命令
# Sample data
dat <- data.frame(
id = 1:100,
group = factor(sample(c("A", "B"), 100, replace = TRUE)),
sessions = factor(sample(1:10, 100, replace = TRUE))
)
# dplyr/tidyr solution
library(dplyr)
library(tidyr)
dat %>%
group_by(group, sessions) %>%
tally() %>%
spread(key = group, value = n) %>%
mutate(All = rowSums(.[-1])) %>%
gather(key = group, value = n, -sessions) %>%
group_by(group) %>%
mutate(
cum_n = cumsum(n),
p = round(n / sum(n)*100,1),
cum_p = round(cum_n / sum(n)*100,1),
) %>%
data.frame() %>%
reshape(timevar = "group", idvar = "sessions", direction = "wide")
# As far as I get using tables::tabulate
library(tables)
tabular(
Factor(sessions, "Sessions") ~
(Heading()*group + 1) *
(
(n = 1) +
# (cum_n = ??) +
Heading("%")*Percent(denom = "col")*Format(digits = 2)
# + Heading("cum_%")*??*Format(digits = 2)
),
data = dat
)
#示例数据
dat%
分组人(组,会话)%>%
计数()%>%
排列(键=组,值=n)%>%
突变(全部=行和(.[1]))%>%
聚集(键=组,值=n,-会话)%>%
分组依据(分组)%>%
变异(
cum_n=cumsum(n),
p=四舍五入(n/和(n)*100,1),
cum_p=四舍五入(cum_n/总和(n)*100,1),
) %>%
data.frame()%>%
重塑(timevar=“group”,idvar=“sessions”,direction=“wide”)
#就我使用tables::tablate获得的数据而言
图书馆(表格)
表格的(
因子(会话,“会话”)~
(标题()*组+1)*
(
(n=1)+
#(cum_n=??)+
标题(“%”*百分比(denom=“col”)*格式(数字=2)
#+标题(“总和%”*??*格式(数字=2)
),
数据=dat
)
我建议使用knitr::kable
和kableExtra
,这是用于生成表的神奇软件包。您还可以将其设置为多格式输出,例如使用相同的代码生成pdf的html
和latex
我不清楚您想做什么,但如果您能用所需的所有数据创建一个简单的data.frame,您就可以将其转换为html表格,并使用任何您喜欢的CSS。@LyzandeR谢谢。我想我是在特别寻找嵌套/合并列标题,您的链接显示得非常好。非常好,很高兴我能提供帮助:)感谢您将我更改为这些包的出色功能。关于tables包,我喜欢的一件事是列标题的嵌套——如果数据以data.frame的形式呈现,我不确定这是否可行?啊,刚刚找到了该怎么做的!
library(dplyr)
library(tidyr)
library(knitr)
library(kableExtra)
dat %>%
group_by(group, sessions) %>%
tally() %>%
spread(key = group, value = n) %>%
mutate(All = rowSums(.[-1])) %>%
gather(key = group, value = n, -sessions) %>%
group_by(group) %>%
mutate(
cum_n = cumsum(n),
p = round(n / sum(n)*100,1),
cum_p = round(cum_n / sum(n)*100,1),
) %>%
data.frame() %>%
reshape(timevar = "group", idvar = "sessions", direction = "wide") %>%
kable("html") %>%
kable_styling(bootstrap_options = c("striped", "hover"))