2016-08-04 1 views
0

У меня есть кадр данных в R, состоящий из ЛОСА и несколько более широких условийНахождение дисперсии столбца другого согласованного коэффициент колонке

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

Я хотел бы найти дисперсию ЛОСА для каждого из более широких условий, есть ли простой способ сделать это?

Любой совет будет оценен, спасибо!

Воспроизводимые похож набор данные ниже

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 ~ Condition, data = data, FUN = var)' должен работать или 'data [,. (Var (LOS)), by =" Condition "]' для data.table. – lmo

+0

Конечно, да, это правильно. Спасибо. – Rowley058

+1

Возможный дубликат [Совокупность данных в определенном столбце и отображение другого столбца] (http://stackoverflow.com/questions/6289538/aggregate-a-dataframe-on-a-given-column-and-display-another- столбец) – Sotos

ответ

0

Это создает новый data.frame с результатами:

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> 

В NA значений вводятся, так как не существует дисперсии только с одним значением. С вашим набором данных (который, очевидно, содержит больше наблюдений) они не должны создаваться.

+0

Это отлично работает, и спасибо, однако код @ lmo немного проще в использовании. Я полностью забыл об агрегате – Rowley058

Смежные вопросы