group_rows в цикле for для создания таблицы - PullRequest
1 голос
/ 28 марта 2019

Вот код для моих примеров-данных:

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).Теперь я хочу выполнить t.Test для каждого df и каждого порога -> t.test(varA, varB).

С этим кодом я получаю то, что хочу: таблицу t.tests для всех dfs и всех порогов.

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 не работает.Может кто-нибудь помочь мне реализовать функцию group_rows () - в цикле for?

1 Ответ

1 голос
/ 28 марта 2019

Если я правильно понимаю, я думаю, что вы можете пропустить цикл for и просто использовать index = аргумент group_rows. Как то так (ниже). Кроме того, в вашем примере кода я думаю, что вы добавили порог = пороги при добавлении нового столбца.

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...