Как я могу l oop через функции, используя список переменных - PullRequest
1 голос
/ 26 февраля 2020

У меня есть код, в котором я создаю факторы, а затем хочу суммировать, иметь таблицу пропорциональности и вычисление невозможности:

myvars <- names(Diab[c(17:33)])

Diab[myvars] <- lapply(Diab[myvars], ordered, levels = c("No","Down","Steady","Up"),                   labels = c("No","Down","Steady","Up"))

summary(Diab$metformin)

round(prop.table(summary(Diab$metformin)),3)

unalike(Diab$metformin)

summary(Diab$repaglinide)

round(prop.table(summary(Diab$repaglinide)),3)

unalike(Diab$repaglinide)

.....

, где

myvars [1] "метформин" "репаглинид" "натеглинид"
[4] "хлорпропамид" "глимепирид" "глипизид"
[7] "глибурид" "толбутамид" "пиоглитазон"
[10] "росиглитазон" "акарбоза" "миглитол"
[13] "толазамид" "glyburide_metformin" "glipizide_metformin"
[16] "glimepiride_pioglitazone" "insulin"

Вместо кодирования summary(), round(prop.table()) и unalike() для каждого из myvars, как я могу сделать это в al oop? Я знаю, что могу summary(Diab[myvars]), поставить вывод в столбцах, и я хочу сохранить вывод в строках следующим образом:

summary(Diab$metformin)
    No   Down Steady     Up 
 22057    162   5310    275 
round(prop.table(summary(Diab$metformin)),3)
    No   Down Steady     Up 
 0.793  0.006  0.191  0.010 
unalike(Diab$metformin)
0.3340651

Заранее спасибо за ваши решения.

1 Ответ

0 голосов
/ 26 февраля 2020

Рассмотрите возможность преобразования ваших широких данных в длинный формат, а затем выполните 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

Демоверсия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...