2017-07-10 1 views
-1

J'ai une trame de données du formulaireComment utiliser une valeur d'une colonne pour extraire une autre valeur d'une autre colonne R

> geneRows[1:3,] 
     Probe/gene  logFC  CI.L  CI.R AveExpr   t P.Value adj.P.Val 
17656 220307_at -0.09017596 -0.4395575 0.25920561 6.104288 -0.5992736 0.5662047   1 
37517 220307_at 0.08704844 -0.2613434 0.43544028 6.104288 0.5801327 0.5784053   1 
57376 220307_at -0.03501474 -0.1267764 0.05674688 6.152467 -0.7816350 0.4409881   1 
       B gene  GSE    Group1     Group2 shape color 
17656 -5.639256 CD244 GSE2461    Male     Female x-open black 
37517 -5.978691 CD244 GSE2461 ulcerative colitis irritable bowel syndrome x-open black 
57376 -5.141940 CD244 GSE27887 nonlesional skin   lesional skin x-open black 

Je veux sous-ensemble ce que je puisse obtenir à la colonne CI.R lorsque la Colonne CI.L est une certaine valeur. Par exemple, j'ai essayé

geneRows$CI.R[geneRows$CI.L == -0.4395575]

mais je reviens numeric(0), ce qui signifie un vecteur vide. Mais quand je l'essayer sur un ensemble de données de l'échantillon, quelque chose comme

mtcars$mpg[mtcars$carb==8]

cela fonctionne très bien. Ce sont les mêmes types de données et tout, alors quel est le problème ici?

Contexte

Je crée des lignes à ajouter à une parcelle plotly.

line <- list(
     type = "line", 
     line = list(color = "grey"), 
     width = 0.2, 
     xref = "x", 
     yref = "y" 
    ) 

    lines <- list() 
    for (i in geneRows$CI.L) { 
     line[["x0"]] <- i 
     line[["x1"]] <- #here 

     lines <- c(lines, list(line)) 
    } 

Ils doivent tirer CI.L-CI.R pour chaque ligne. J'essaie d'obtenir le point final x1 de la table via le point de départ.

+0

pouvez-vous vérifier la classe de chaque colonne? Est-ce numérique? – cderv

+0

Oui à la fois 'CI.L' et' CI.R' sont numériques –

+0

Essayez 'dplyr :: filter':' filter (geneRows, CI.L == -0.4395575) ' – Mako212

Répondre

0

Vos numéros peuvent avoir plus de précision que ce qui est imprimé. Par exemple:

> -0.4395575 == -0.4395575 
[1] TRUE 
> -0.4395575 == -0.4395575001 
[1] FALSE 

Vous pouvez utiliser à la place all.equal qui, par défaut a une tolérance de 1.5e-8, mais peut être ajusté.

> all.equal(-0.4395575, -0.4395575001) 
[1] TRUE 
> all.equal(-0.4395575, -0.4395575001, tolerance = 1e-10) 
[1] "Mean relative difference: 2.275015e-10"