2016-08-04 12 views
0

ich einen Datenrahmen in R haben die aus LOS und mehreren weiteren BedingungenFinding Varianz einer Spalte von einem anderen angepassten Spaltenfaktor

LOS    Condition 
    1    Spinal 
    2    Urology 
    1    Thoracic 
    8    Spinal 
    5    Billary 
...     ... 

Ich möchte für jeden der breiteren die Varianz der LOS finden Bedingungen, gibt es einen einfachen Weg, dies zu tun?

Jeder Rat würde geschätzt werden, danke!

Reproduzierbare ähnlicher Datensatz unter

data <- structure(list(LOS = c(6, 6, 13, 6, 19, 7), Condition = structure(c(37L, 15L, 24L, 15L, 15L, 15L), .Label = c("Acute Liver Failure", "Aortic Disease", "Arthritis and Limb Deformity/Fractures", "Asphyxiation", "Billary", "Bowel Infection/Perforation/Infarction", "Breast Cancer", "Cancer (Unoperated)", "Cardiac Arrest", "Cardiac Arythmia", "Cerebral Aneurysm (Non-Ruptured)", "Cerebral Infarction", "Cerebral Oedema", "Chronic Liver Disease", "COPD/Asthma/Respiratory Failure", "Drug Overdose and Poisoning", "Ear/Nose/Throat", "Electrolyte", "Encephalitis", "Endocrine", "Epilepsy", "Gastroectomy", "Gynaecological Cancer/Surgery", "Heart Failure", "Hydrocephalus", "Hyperventilation Syndromes", "Infection incl. unspecified", "Influenza", "Interstitial Pulmonary Disease", "Large Bowel Cancer", "Max Fax Surgeries", "Meningitis", "Myocardial Infarction", "Neuro-Surgical Cancer", "Obesity", "Other Inter-Cerebral Haemmorhage", "Pancreatitis", "Perforation of Oesophagus", "Peripheral Vascular Disease (Inlc. Ischaemia and Infarction", "Pleural Effusion", "Pneumonia", "Psychiatric", "Pulmonary/Veno-Thrombo Embollism", "Skin Inflammation/Infection", "Skull and Facial Fractures", "Spinal Cord Weakness", "Spinal Surgery/Fractures", "Spinal Trauma", "Sub-Arachnoid Haemmorhage", "Systemic Weakness", "Thoracic/Abdominal Aortic Aneurysm (Non-Ruptured)", "Thoracic/Abdominal Aortic Aneurysm (Ruptured incl. injury)", "Trauma to Intra-Abdominal Organs/Vessels", "Trauma to Thoracic Cage", "Traumatic Inter-Cerebral Haemmorhage/Contusions/Oedema", "Urology/Renal Surgery" ), class = "factor")), .Names = c("LOS", "Condition"), row.names = c(NA, 6L), class = "data.frame")

+1

'aggregate (LOS ~ Bedingung, Daten = Daten, FUN = var)' sollte funktionieren oder 'Daten [,. (Var (LOS)), durch =" Bedingung "]' für eine data.table. – lmo

+0

Natürlich, ja das ist richtig. Vielen Dank. – Rowley058

+1

Mögliches Duplikat von [Aggregiere einen Datenrahmen in einer gegebenen Spalte und zeige eine andere Spalte an] (http://stackoverflow.com/questions/6289538/aggregate-a-dataframe-on-a-given-column-and-display-another- Spalte) – Sotos

Antwort

0

Dies ist eine neues data.frame mit den Ergebnissen erstellt:

res <- data.frame(condition = factor(, levels = levels(data$Condition)), varLos = numeric(0)) 
for (i in unique(data$Condition)){ 
    res[nrow(res) + 1,] <- c(as.character(i), var(data[data$Condition == i, "LOS"], na.rm = T)) 
} 
res 
#       condition   varLos 
# 1     Pancreatitis    <NA> 
# 2 COPD/Asthma/Respiratory Failure 40.3333333333333 
# 3     Heart Failure    <NA> 

Die NA Werte eingeführt werden, da es nur keine Varianz mit einem Wert ist. Mit Ihrem Datensatz (der offensichtlich mehr Beobachtungen enthält) sollten diese nicht erstellt werden.

+0

Das funktioniert gut, und danke, aber @ lmo Code ist ein wenig einfacher zu bedienen. Ich habe das Aggregat komplett vergessen – Rowley058

Verwandte Themen