2
votes

Correspondance des valeurs numériques dans une trame de données

a <- c(4000,3500,3000)
b <- c(0.43,0.55,0.61)

test.data <- data.frame(a,b)
Let's say I want to get the value 0.55 by referencing 3500 instead of getting it by row/column. How would I achieve this? I think I could convert a to a string, then reference it that way, but is there a way to refer to the numeric value to extract the value in b?Edit: Thank you all for your great responses!

0 commentaires

3 Réponses :


5
votes

Si je l'ai bien compris, vous pouvez l'obtenir comme suit:

library(dplyr)
test.data %>%
  filter(a == 3500) %>%
  pull(b)
[1] 0.55

Je voudrais également vous présenter dplyr lorsque vous commencez votre voyage R:

test.data$b[test.data$a == 3500]
[1] 0.55


0 commentaires

5
votes

Utilisation de data.table-

> setDT(test.data)[a==3500]$b
[1] 0.55

OR

> setDT(test.data)[a==3500,b]
[1] 0.55

Remarque - Premièrement, l'option est préférée comme @Frank mentionné dans le commentaire.


3 commentaires

Le premier idiome est préféré car il ne crée pas le sous-ensemble des données pour toutes les colonnes, juste celle qui est nécessaire. En outre, il vérifie la correspondance exacte du nom de la colonne.


@Frank Je suis d'accord. Mais je lui donnais plus d'options.


Lorsque vous donnez des options, il est agréable de parler des différences et des raisons pour lesquelles l'un pourrait préférer l'une à l'autre.



3
votes

Plus d'options.

test.data[, "b"][test.data$a == 3500]
# [1] 0.55

test.data[test.data$a == 3500, "b"]
# [1] 0.55


1 commentaires

Un autre: avec (test.data, b [a == 3500])