Основываясь на структуре таблицы, мы можем unclass
на выходе вернуть list
, извлечь компонент 'ContTable', который снова равен list
, поэтому мы l oop вместо list
с помощью lapply
, а затем получить строку, имена столбцов для извлечения отдельных компонентов ('n', 'mean', 'sd'), отформатировать вывод с помощью sprintf
для определенных компонентов и вернуть как list
. Чтобы сделать имена n_1
, n_2
, et c. l oop поверх list
с Map
, задайте имена с помощью paste
ing, а затем используйте list2env
для создания объектов в глобальной среде (хотя и не рекомендуется)
library(tableone)
lst1 <- unclass(table2)
lst2 <- lapply(unclass(lst1$ContTable), function(x)
list(n = x[1, "n"], age = sprintf('%f (%0.2f)', x['age', 'mean'],
x['age', 'sd']), time = sprintf('%f (%0.2f)', x['time', 'mean'],
x['time', 'sd'])))
Map(function(x, y) list2env(setNames(x, paste0(names(x), "_", y)),
.GlobalEnv), lst2, names(lst2))
- вывод
n_1
#[1] 138
n_2
#[1] 90
age_1
#[1] "63.340580 (9.14)"
age_2
#[1] "61.077778 (8.85)"
time_1
#[1] "283.231884 (213.05)"
time_2
#[1] "338.966667 (203.47)"
данные
vars <- c("age","ph.ecog","time")
catvars <- c("ph.ecog")
table2 <- CreateTableOne(vars = vars, factorVars = catvars,
data = lung, strata = "sex")