Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有累积计数/百分比和使用R";表格「;包裹_R_Html Table_Tabular_Cumulative Sum - Fatal编程技术网

具有累积计数/百分比和使用R";表格「;包裹

具有累积计数/百分比和使用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

我试图生成一个格式化的html表,其中包含频率、累计频率、列百分比和累计列百分比列。该表还应具有分组变量的数据子集,并包括组总数

我几乎可以使用dplyr和tidyr的组合来实现这一点,但是输出是一个看起来不太漂亮的数据帧。我想知道是否有更简单的方法使用
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"))