Резюмировать статистику после lapply

У меня есть фрейм данных с несколькими столбцами и двумя разными группами — см. ниже.

set.seed(123) 
d <- data.frame(
  q1 = rnorm(20),
  q2 = rnorm(20),
  q3 = rnorm(20),
  group = sample(c("A", "B"), size = 20, replace = TRUE))

Я использую lapply для вычисления ttest для каждого столбца между двумя группами, как указано ниже:

lapply(d[,-4], function(i) t.test(i ~ d$group))

lapply возвращает для каждого столбца результаты, содержащие несколько статистических данных (я только что сообщил столбец q1)

$q1

    Welch Two Sample t-test

data:  i by d$group
t = -0.76262, df = 17.323, p-value = 0.4559
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.2294678  0.5759458
sample estimates:
mean in group A mean in group B 
    -0.05443279      0.27232820 

Я хочу резюмировать основную информацию о статистике (t, df, pvalue) в виде одной таблицы для каждого столбца (q1, q2, q3...)

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете снова использовать lapply() для извлечения каждого параметра и bind_rows():

library(dplyr)
lapply(l, function(x) {
  data.frame(t = x$statistic,
             df = x$parameter,
             pv = x$p.value) # returns a dataframe for each element in l
}) %>% bind_rows()

#           t        df         pv
# 1 -1.031983 13.533116 0.32017136
# 2 -2.458574  9.771018 0.03427922
# 3  1.421821 11.416813 0.18181697

Вы можете сделать это одним выстрелом:

lapply(d[,-4], function(i) {
  res <- t.test(i ~ d$group)
  data.frame(t = res$statistic,
             df = res$parameter,
             pv = res$p.value)
  }) %>% bind_rows()

Если вы хотите сохранить ссылку на имена столбцов, передайте .id на bind_rows():

lapply(d[,-4], function(i) {
  res <- t.test(i ~ d$group)
  data.frame(t = res$statistic,
             df = res$parameter,
             pv = res$p.value)
}) %>% bind_rows(.id='id')
#   id          t       df        pv
# 1 q1 -0.7626249 17.32329 0.4559469
# 2 q2 -1.6467070 17.73117 0.1172263
# 3 q3  0.5288851 13.01589 0.6057874

Пример:

set.seed(123) 
d <- data.frame(
  q1 = rnorm(20),
  q2 = rnorm(20),
  q3 = rnorm(20),
  group = sample(c("A", "B"), size = 20, replace = TRUE))
l <- lapply(d[,-4], function(i) {
  t.test(i ~ d$group)

  })

вы можете избежать bind_rows, используя sapply ? data.frame(sapply(d[,-4], function(i) { res <- t.test(i ~ d$group); c(t = res$statistic, df = res$parameter, pv = res$p.value) }))

Ronak Shah 22.05.2019 13:43

Знаете ли вы, как сообщать о colnames?

Al14 22.05.2019 15:15

Забудьте об этом, смотрите мое обновление, для .id есть параметр bind_rows(), который дает то, что вы хотите.

RLave 22.05.2019 15:37

Другие вопросы по теме

Передача более одного аргумента в FUN of lapply
Линейная интерполяция по списку фреймов данных
Удаление элемента из всех встроенных списков в списке в R
Есть ли функция, подобная lapply, для объекта S4?
Как запустить несколько линейных регрессий с разными независимыми переменными и зависимыми переменными, добавляя стандартизированные коэффициенты в R?
Поиск элементов вектора на основе числовых позиций, определенных в другом векторе в R
Как преобразовать список выходных данных регрессии в фреймы данных с помощью broom::tidy с помощью функции lapply?
Выберите/получите имена всех столбцов, которые имеют отрицательное значение от 0 до 10.
Как использовать цикл for или Laaply для усечения случайной переменной t на биржевых данных для имитации цен опционов с использованием библиотеки foptions
Создайте несколько фреймов данных, отфильтровав подмножества, которые не равны значению в R.