R запустить несколько функций на нескольких столбцах на основе двоичной переменной столбца - PullRequest
2 голосов
/ 02 апреля 2012

Я хотел бы знать наиболее эффективную технику для решения повторяющейся проблемы.

У меня есть много БД в формате электронных таблиц / CSV, которые имеют эту форму (0,1 для переменных T / F):

id_code, age,  heart_disease, weight, gender, operated, survived, ct_scan, days_hospitalized, 
1332,    43.2, 1,             213,    m,      0,        1,        1,       12
22322,   76.4, 0,             125,    f,      1,        0,        0,       45
995,     55,   1,             199,    m,      0,        1,        0,       34

Чтобы выполнить t-тест для непрерывных переменных, скажем, выживших против не выживших:

myfx1 <- function(x) {t.test((x), mydat$survived)}
myfx1(mydat$age)
myfx1(mydat$weight)

затем я заменяю «в живых» другой переменной и повторяю.

Чтобы сделать перекрестные метки на случай непредвиденных обстоятельств у выживших против не выживших,

myfx2 <- function(x) {xtabs(~mydat$survived+x, data=mydat)}
myfx2(mydat$gender)
myfx2(mydat$operated)

Я пробовал plyr и doBy ; во многих примерах всегда используется среднее / дисперсия или другие простые функции для демонстрации использования. Какой самый простой и эффективный способ обработки большого количества переменных?

1 Ответ

1 голос
/ 02 апреля 2012

В пакете plyr есть прекрасная маленькая функция, которая запускает функцию по столбцам.

colwise(myfx1)(your_db[,you_numeric_columns]) 

Обновление:

id_code <- sample(1:1000,500)
age <- sample(40:80,500, replace=T)
heart_disease <- sample(0:1,500,replace=T)
weight <- sample(105:250,500,replace=T)
operated <- sample(0:1,500,replace=T)
survived <- sample(0:1,500,replace=T)
ctscan <- sample(12:45,500,replace=T)

dat <- data.frame(id_code,age,heart_disease,weight,operated,survived,ctscan)

fx1 <- function(x) t.test(x, dat$survived)$p.value

colwise(fx1)(dat[,2:ncol(dat)])

У меня работает ... как пример.

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