У меня есть набор данных из примерно 100 переменных, и я хотел бы построить таблицу со сводками примерно из 30 этих переменных. Чтобы сделать это, я вручную запустил таблицу и другие функции для этих переменных и обработал результаты. Однако, поскольку мне нужно сделать это для 30+ переменных, я хотел бы автоматизировать процесс с помощью функции.
Вот пример набора данных:
df <- data.frame(v1=c('a','b','c','c','b'),v2=c('d','d','e','e','e'),cat=c('1low','1low','2med','3high','2med'))
Цель состоит в том, чтобы создать таблицу, подобную приведенной ниже (без NA). ![Example of final table](https://i.stack.imgur.com/BTZUa.gif)
Ниже приведен мой код:
library(formattable)
# For var1 & var2, apply the table function and convert to dataframe so that the row labels are incorporated into dataset
var1.df <- as.data.frame(table(df$v1, df$cat))
# reshape to achive wide format (goal to view the count of each var1 level across low, med, high cats)
var1.df <- reshape(var1.df, idvar = "Var1", timevar = "Var2", direction = "wide")
# add col names
names(var1.df) <- c("vcat","low","med","high"); var1.df
# repeat above steps for next variable. in true dataset, I will need to repeat for 30 vars...
var2.df <- as.data.frame(table(df$v2, df$cat))
var2.df <- reshape(var2.df, idvar = "Var1", timevar = "Var2", direction = "wide")
names(var2.df) <- c("vcat","low","med","high")
# Create variable headings
var1.heading <- data.frame("variable 1",NA,NA,NA) # ideally, the NAs are blanks
names(var1.heading) <- c("vcat","low","med","high")
var2.heading <- data.frame("variable 2","","","")
names(var2.heading) <- c("vcat","low","med","high")
# Rbind the category headings and the table result data
table01 <- do.call("rbind", list(var1.heading, var1.df,
var2.heading, var2.df))
# Format the table for presentation
heading.list <- c("variable 1", "variable 2")
x <- formattable(table01,
align =c("l","c","c","c","c"),
list(vcat = formatter("span", style = x ~ ifelse(x %in% heading.list,
style(font.weight = "bold"), NA))))
Мои приведенные ниже попытки автоматизировать приведенный выше код либо не завершены (a), либо не выполняются должным образом (b)
# (a)
lapply(df, function(x) as.data.frame(table(x, df$cat)))
# (b)
myfxn <- function(x){
y <- as.data.frame(table(x, df$cat))
y <- reshape(y, idvar = "x", timevar = "Var2", direction = "wide")
names(y) <- c("vcat","low","med","high")
}
lapply(df, myfxn(x))
Есть предложения, как мне автоматизировать этот процесс для еще нескольких переменных? Кроме того, есть ли другой способ вставки заголовков категорий в таблицу, кроме ручного создания вставки однострочного кадра данных? Обратите внимание, что я вставил NA в var1.heading, так как это первый фрейм данных; Когда я пытался вставить "" вместо пробелов (например, var2.heading), последующие кадры данных не связывались, потому что они были факторами, а не символами. Заранее большое спасибо!