web-dev-qa-db-fra.com

Erreur: utilisation non prise en charge de la matrice ou du tableau pour l'indexation des colonnes

J'ai une liste de variables nom "comorbid_names". Et je veux sélectionner les personnes qui ont ces comorbidités dans les "comorbidités". Cependant, je veux sélectionner les noms de variables s'ils sont vrais. 

Par exemple, le patient 1 a seulement "chd", donc seulement cela sera affiché comme TRUE

noms comorbides [1] "chd" "heart_failure" "stroke"
[4] "hypertension" "diabète" "copd"
[7] "épilepsie" "hypothyroïdie" "cancer"
[10] "asthme" "ckd_stage3" "ckd_stage4"
[13] "ckd_stage5" "atrial_fibrilation" "learning_disability"
[16] "maladie_terférentielle_artérielle" "" ostéoporose "
classe (noms comorbides) [1] "personnage"

comorbidités <- noms (p [ noms de comorbides] [p [ noms de comorbides] == 1])

À ce stade, j'obtiens cette erreur

Erreur: Utilisation non prise en charge de la matrice ou du tableau pour l'indexation des colonnes

Je ne sais pas trop pourquoi, mais je pense que c'est parce que comorbid_names est un personnage.

Est-ce que quelqu'un a un conseil?

5
Rospa

Si p est une tibble au lieu ou en plus d'un data.frame, vous pouvez traiter les éléments suivants:

https://blog.rstudio.org/2016/03/24/tibble-1-0-0/

Regardez au bas du post:

Interaction avec le code hérité

Quelques fonctions ne fonctionnent pas avec les mots-clés, car ils s'attendent à ce que df [ 1] renvoie un vecteur et non un cadre de données. Si vous rencontrez l'une de ces fonctions, utilisez as.data.frame () pour remettre un tibble en arrière en un bloc de données:

classe (as.data.frame (tbl_df (iris)))

Vous pourriez aussi bien vous comporter en faisant p <- as.data.frame(p).

15

Utiliser simplement p[, comorbid_names] == 1 vous donnera le tableau des valeurs VRAI/FAUX pour les morbidités que vous avez sélectionnées. Pour ajouter les noms de patient ou les ID à cette liste, utilisez cbind, comme ceci: cbind(p["patient_id"], p[, comorbid_names] == 1) où "patient_id" est le nom de la colonne qui identifie les patients.

Voici un exemple reproductible complet:

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)

Si vous souhaitez sélectionner uniquement les patients qui souffrent d'au moins une des morbidités, procédez comme suit:

comorbidities[rowSums(comorbidities[-1]) != 0]
0
HAVB