Рассмотрите возможность преобразования ваших широких данных в длинный формат, а затем выполните table
(эквивалентно summary.factor
) и prop.table
. Делая это, вы избегаете необходимости зацикливания. Незнакомое с определением unalike
, возможно, из ragree package , похоже, вы можете передать фрейм данных с именованными аргументами.
Diab_long <- reshape(Diab[c(17:33)], varying = names(Diab), times = names(Diab),
v.names = "value", timevar = "metric", ids = NULL,
new.row.names = 1:1E4, direction = "long")
tbl <- table(Diab_long)
prop.table(tbl, margin = 1)
ragree::unalike(Diab_long, ...)
Для демонстрации с заполненными случайными данными:
Данные
set.seed(22620)
lvls <- c("No","Down","Steady","Up")
# DATA FRAME OF ALL FACTORS
Diab <- setNames(data.frame(replicate(17, factor(sample(lvls, 10, replace=TRUE),
levels = c("No","Down","Steady","Up")))),
c("metformin", "repaglinide", "nateglinide",
"chlorpropamide", "glimepiride", "glipizide",
"glyburide", "tolbutamide", "pioglitazone",
"rosiglitazone", "acarbose", "miglitol",
"tolazamide", "glyburide_metformin",
"glipizide_metformin",
"glimepiride_pioglitazone", "insulin"))
# RESHAPE TO LONG
Diab_long <- reshape(Diab, varying = names(Diab), times = names(Diab),
v.names = "value", timevar = "metric", ids = NULL,
new.row.names = 1:1E4, direction = "long")
Выход (не включает unalike
)
tbl <- table(Diab_long)
tbl
# value
# metric Down No Steady Up
# acarbose 1 2 2 5
# chlorpropamide 4 4 1 1
# glimepiride 6 3 0 1
# glimepiride_pioglitazone 4 0 2 4
# glipizide 4 4 2 0
# glipizide_metformin 2 3 3 2
# glyburide 3 2 3 2
# glyburide_metformin 1 3 6 0
# insulin 1 1 5 3
# metformin 2 2 4 2
# miglitol 1 3 5 1
# nateglinide 6 3 1 0
# pioglitazone 1 4 3 2
# repaglinide 1 4 2 3
# rosiglitazone 1 7 1 1
# tolazamide 2 4 1 3
# tolbutamide 3 3 2 2
ptbl <- prop.table(tbl, margin = 1)
ptbl
# value
# metric Down No Steady Up
# acarbose 0.1 0.2 0.2 0.5
# chlorpropamide 0.4 0.4 0.1 0.1
# glimepiride 0.6 0.3 0.0 0.1
# glimepiride_pioglitazone 0.4 0.0 0.2 0.4
# glipizide 0.4 0.4 0.2 0.0
# glipizide_metformin 0.2 0.3 0.3 0.2
# glyburide 0.3 0.2 0.3 0.2
# glyburide_metformin 0.1 0.3 0.6 0.0
# insulin 0.1 0.1 0.5 0.3
# metformin 0.2 0.2 0.4 0.2
# miglitol 0.1 0.3 0.5 0.1
# nateglinide 0.6 0.3 0.1 0.0
# pioglitazone 0.1 0.4 0.3 0.2
# repaglinide 0.1 0.4 0.2 0.3
# rosiglitazone 0.1 0.7 0.1 0.1
# tolazamide 0.2 0.4 0.1 0.3
# tolbutamide 0.3 0.3 0.2 0.2
Демоверсия