2012-04-01 9 views
2

Ich würde gerne die effizienteste Technik, um ein wiederkehrendes Problem zu lösen wissen.R mehrere Funktionen auf mehreren Spalten basierend auf binäre Spalte Variable

Ich habe viele DBs in Tabelle/CSV-Format, die diese Form haben (0,1 für T/F-Variablen):

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 

Um beim Test auf den kontinuierlichen Variablen in auszuführen, sagen wir, Überlebende gegen Nichtüberlebende:

dann ersetze ich 'überlebte' mit einer anderen Variable und wiederhole.

Um Kontingenz Crosstabs in Überlebenden vs Nicht-Überlebenden zu tun,

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

I plyr und Doby versucht haben; Die vielen Beispiele verwenden immer Mittelwert/Varianz oder andere einfache Funktionen, um die Verwendung zu demonstrieren. Was ist der einfachste und effizienteste Weg, um eine große Anzahl von Variablen zu verarbeiten?

Antwort

1

Es gibt eine schöne kleine Funktion im Paket plyr, die eine Funktion auf einer spaltenweisen Basis ausführt.

colwise(myfx1)(your_db[,you_numeric_columns]) 

Update:

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)]) 

Arbeiten für mich ... als Beispiel.

+0

Danke - Ich habe dies und Varianten versucht (nachschlagen colwise) wie unten zu sehen. Keine funktioniert. Die Fehler werden mit dem Versuch, gedruckt: 1. colwise (myfx1) (mydat [2]) -> Fehler: is.data.frame (df) ist nicht TRUE 2. colwise (.myfx1, .mydat $ age) -> Fehler in colwise (.myfx1, .mydat $ age): Objekt '.age' nicht gefunden – CLS

+0

3. colwise (.myfx1, mydat $ age) -> Funktion (df, ...) { stopifnot (is.data.frame (df)) df <- strip_splits (df) gefiltert <- Filter (df) if (Länge (gefiltert) == 0) return (data.frame()) df <- quickdf (lapply (gefiltert, .fun, ...)) Namen (df) <- Namen (gefiltert) df } 4. colwise (myfx1, mydat $ age) gleiche Fehler wie 3 4. colwise (myfx1) (mydat [, Alter]) -> Fehler in '[ .data.frame' (mydat,, Alter): Objekt 'Alter' nicht gefunden 5. colwise (myfx1) (mydat [, mydat $ age]) -> Fehler in '[.data.frame' (mydat, , mydat $ age): undefinierte Spalten ausgewählt – CLS

+0

6. ddply (mydat, .age, colwise (myfx1)) -> "Fehler in t.test.default ((x), NEC $ überlebte): nicht genug 'x 'Beobachtungen Zusätzlich: Warnmeldung: In mean.default (x): argume nt ist nicht numerisch oder logisch: Rückgabe von NA " 7. ddply (mydat,, colwise (myfx1, alter)) 8. ddply (mydat,, colwise (myfx1, .age)) – CLS

Verwandte Themen