Ik heb een lijst met variabelen met de naam “comorbid_names”. En mensen die die comorbiditeiten hebben wil ik selecteren in ‘comorbidities’. Ik wil echter de variabelenamen selecteren als ze waar zijn.
Patiënt 1 heeft bijvoorbeeld alleen “chd”, daarom wordt alleen dat weergegeven als WAAR
comorbide_namen
[1] “chd” “heart_failure” “stroke”
[4] “hypertensie” “diabetes” “copd”
[7] “epilepsie” “hypothyreoïdie” “kanker”
[10] “astma” “ckd_stage3” “ckd_stage4”
[13] “ckd_stage5” “atriale_fibrillatie” “learning_disability”
[16] “perifere_arteriële_ziekte” “osteoporose”
class(comorbide_names)
[1] “karakter”
comorbiditeiten <- namen(p[, comorbid_names][p[, comorbid_names] == 1])
Op dit moment krijg ik deze foutmelding
Fout: niet-ondersteund gebruik van matrix of array voor kolomindexering
Ik weet niet helemaal zeker waarom, maar ik denk dat het te maken heeft met comorbide_namen als karakter
Heeft iemand een advies?
Antwoord 1, autoriteit 100%
Als p
een tibble
is in plaats van of naast een data.frame
, heb je mogelijk te maken met het volgende:
https://blog.rstudio.org/2016 /03/24/tibble-1-0-0/
Kijk onderaan het bericht:
Interactie met verouderde code
Een handvol functies werkt niet met tibbles omdat ze verwachten dat df[, 1] een vector retourneert, geen dataframe. Als je een van deze functies tegenkomt, gebruik dan as.data.frame() om een tibble terug te zetten naar een dataframe:
class(as.data.frame(tbl_df(iris)))
Misschien kom je ook overeen door p <- as.data.frame(p)
te doen.
Antwoord 2
Door simpelweg p[, comorbid_names] == 1
te gebruiken, krijgt u de tabel met TRUE/FALSE-waarden voor uw geselecteerde morbiditeiten. Om de patiëntnamen of ID’s aan die lijst toe te voegen, gebruikt u cbind
, als volgt: cbind(p["patient_id"], p[, comorbid_names] == 1)
waarbij “patient_id” is de naam van de kolom die patiënten identificeert.
Hier is een volledig reproduceerbaar voorbeeld:
comorbid_names <- c("chd", "heart_failure","stroke", "hypertension",
"diabetes", "copd", "epilepsy", "hypothyroidism",
"cancer", "asthma", "ckd_stage3", "ckd_stage4",
"ckd_stage5", "atrial_fibrilation", "learning_disability",
"peripheral_arterial_disease", "osteoporosis")
all_morbidities <- c("chd", "heart_failure","stroke", "hypertension",
"diabetes", "copd", "epilepsy", "hypothyroidism",
"cancer", "asthma", "ckd_stage3", "ckd_stage4",
"ckd_stage5", "atrial_fibrilation", "learning_disability",
"peripheral_arterial_disease", "osteoporosis",
"hairyitis", "jellyitis", "transparency")
# Create dummy data frame "p" with patient ids and whether or not they suffer from each condition
patients <- data.frame(patient_id = 1:20)
conditions <- matrix(sample(0:1, nrow(patients)*length(all_morbidities), replace=TRUE),
nrow(patients),
length(all_morbidities))
p <- cbind(patients, conditions)
names(p) <- c(names(patients), all_morbidities)
# Final step: get patient IDs and whether they suffer from specific morbidities
comorbidities <- cbind(p["patient_id"], p[, comorbid_names] == 1)
Als u alleen die patiënten wilt selecteren die lijden aan ten minste één van de Morbiditeiten, doe dit dan:
comorbidities[rowSums(comorbidities[-1]) != 0]