繁体   English   中英

group_rows 在 for 循环中创建表

[英]group_rows in a for-loop to create a table

这是我的示例数据的代码:

library(tidyverse)
library(kableExtra)
library(knitr)

df1 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)


df2 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)


df3 <- tibble(
var1A= rnorm(1:10) +1,
var1B= rnorm(1:10) +1,
var2A= rnorm(1:10) +2,
var2B= rnorm(1:10) +2,
var3A= rnorm(1:10) +3,
var3B= rnorm(1:10) +3)

我有 3 个带有 2 个变量(A 和 B)的数据帧,每个 df 都有 3 个阈值(1,2,3)。 现在我想对每个 df 和每个阈值执行 t.Test -> t.test(varA, varB)

有了这些代码,我得到了我想要的:所有 dfs 和所有阈值的 t.tests 表。

threshold <- seq(1,3)
list_dfs = c('df1','df2','df3')

table.t.test <-map(list_dfs,
               function(df_name){
                 x <- get(df_name)
                 lapply(threshold, function(i){
                   t.test(x %>%
                            pull(paste0("var",i,"A")), 
                          x %>% 
                            pull(paste0("var",i,"B")))
                 }) %>% 
                   map_df(broom::tidy) %>% 
                   add_column(.before = 'estimate',
                              df = df_name, 
                              threshold = thresholds)
               }) %>% 
do.call(rbind, .)%>%
select(-estimate, -parameter, -conf.low, -conf.high, -method, -alternative)

在最后一步中,我想按表中的数据帧对行进行分组:

table.t.test%>%
kable()%>%
kable_styling()%>%
group_rows(list_dfs[1],1,3)%>%
group_rows(list_dfs[2],4,6)%>%
group_rows(list_dfs[3],7,9)

我担心的是我想用 for 循环自动对行进行分组:

for (i in seq_along(list_dfs)){
table.t.test%>%
kable()%>%
kable_styling()%>%
group_rows(list_dfs[i],i*3-2,i*3)
}

但是我的 for 循环不起作用。 有人可以帮助我在 for 循环中实现 group_rows() 函数吗?

如果我理解正确,我认为您可以跳过 for 循环而只使用group_rowsindex =参数。 像这样的东西(下)。 此外,在您的示例代码中,我认为您在添加新列时翻转了阈值 = 阈值。

names <- sapply(list_dfs, "[")
frequencies <- rle(table.t.test$df)$lengths

table.t.test[-1] %>% # [-1] b/c redundant info if you are grouping rows
  kable()%>%
  kable_styling()%>%
  group_rows(index = setNames(frequencies, names))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM