2017-07-20 3 views
1

Je travaille donc avec des données biologiques dans un hôpital (je ne divulguerai rien ici mais je n'en aurai pas besoin pour poser cette question). Nous examinons les concentrations d'anticorps prises un certain temps. Il y a, pour une raison ou une autre, des points de données manquants partout dans notre ensemble de données. Ce que je fais essaie d'enlever les points de données manquants avec leur temps correspondant. À l'heure actuelle, l'objectif de base est simplement d'obtenir des graphiques et des graphiques de base, mais nous allons finalement vouloir créer des modèles logistiques et des modèles dynamiques non linéaires que nous ferons dans une autre langue.Supprimer les points de données manquants (NA) de plusieurs vecteurs

1) D'abord, je mis mes données dans un vecteur avec il est temps correspondant:

data <- read.csv("blablabla.csv" header = T) 
Biomarker <- data[,2] 
time <- data[,1] 

2) Puis-je trier les données:

Biomarker <- Biomarker[order(time)] 
time <- sort(time, decreasing = F) 

3) Ensuite, je mets les indices de NA valeurs dans un vecteur

NA_Index <- which(is.na(Biomarker)) 

4) Ensuite, je tente de supprimer les points de données à cet index pour les deux marqueurs biologiques et vecteur temps

i <- 1 
n <- length(NA_Index) 

for(i:n){ 
    Biomarker[[NA_Index[i]]] <- NULL 
    time[[NA_Index[i]]] <- NULL 
} 

Aussi j'ai essayé quelques choses différentes que celle ci-dessus:

1)

Biomarker <- Biomarker[-NA_Index[i]] 

2)

Biomarker <- Biomarker[!= "NA"] 

Ma question est: « Comment puis-je supprimer les valeurs NA de mes vecteurs et supprimer l'heure avec le même index? " Donc, évidemment, je suis très nouveau à R et peut-être aller à ce sujet dans un complètement faux. Je demande juste que vous expliquiez tout ce que font toutes les fonctions si vous postez du code. Merci pour l'aide.

+0

Est-ce que 'complete.cases (data)' serait plus direct et précis? – r2evans

+0

désolé je ne suis pas sûr de ce que complete.cases() – jsaffy

+0

Je pense que la [page d'aide] (https://stat.ethz.ch/R-manual/R-devel/library/stats/html/complete.cases .html) pourrait probablement utiliser un autre exemple ou deux. Essayez: 'x <- data.frame (a = c (1, NA, 3), b = c (NA, 22,33)); complete.cases (x); x [complete.cases (x),]; Vous pouvez toujours déterminer quelles colonnes de 'x' sont considérées dans la portée de l'exhaustivité, comme' x [complete.cases (x [, 1]),] '. – r2evans

Répondre

0
> BioMarker 
[1] 1 2 NA 3 NA 5 
> is.na(BioMarker) 
[1] FALSE FALSE TRUE FALSE TRUE FALSE 
> BioMarker[is.na(BioMarker)] 
[1] NA NA 
> BioMarker[! is.na(BioMarker)] 
[1] 1 2 3 5 
> BioMarker <- BioMarker[! is.na(BioMarker)] 
> BioMarker 
[1] 1 2 3 5 
1

D'abord, je vous recommande de stocker vos données dans un data.frame au lieu de deux vecteurs, étant donné que les entrées dans les vecotors correspondent à des cas cela est une structure de données plus approprié.

my_table <- data.frame(time=time, Biomarker=Biomarker) 

Ensuite, vous pouvez tout simplement sous-ensemble l'ensemble data.frame, la première dimension sont rangées, les secondes colonnes, comme d'habitude, laissez la deuxième dimension libre de garder toutes les colonnes.

my_table <- my_table[!is.na(my_table$Biomarker), ]