Dans le jeu de valeurs suivant, comment puis-je trouver le numéro de ligne d'une valeur particulière dans la colonne 4?
Par exemple, comment trouver le numéro de ligne de la valeur "1578" qui se trouve dans la colonne numéro 4 à l'aide des commandes de code R.
> mydata_2
sex age height_seca1 height_chad1 height_DL weight_alog1
1 F 19 1800 1797 180 70.0
2 F 19 1682 1670 167 69.0
3 F 21 1765 1765 178 80.0
4 F 21 1829 1833 181 74.0
5 F 21 1706 1705 170 103.0
6 F 18 1607 1606 160 76.0
7 F 19 1578 1576 156 50.0
8 F 19 1577 1575 156 61.0
9 F 21 1666 1665 166 52.0
10 F 17 1710 1716 172 65.0
11 F 28 1616 1619 161 65.5
12 F 22 1648 1644 165 57.5
13 F 19 1569 1570 155 55.0
14 F 19 1779 1777 177 55.0
15 M 18 1773 1772 179 70.0
16 M 18 1816 1809 181 81.0
17 M 19 1766 1765 178 77.0
18 M 19 1745 1741 174 76.0
19 M 18 1716 1714 170 71.0
20 M 21 1785 1783 179 64.0
21 M 19 1850 1854 185 71.0
22 M 31 1875 1880 188 95.0
23 M 26 1877 1877 186 105.5
24 M 19 1836 1837 185 100.0
25 M 18 1825 1823 182 85.0
26 M 19 1755 1754 174 79.0
27 M 26 1658 1658 165 69.0
28 M 20 1816 1818 183 84.0
29 M 18 1755 1755 175 67.0
Je serais tenté d'utiliser grepl
, ce qui devrait donner toutes les lignes avec des correspondances et peut être généralisé pour des chaînes arbitraires.
mydata_2 <- read.table(textConnection("
sex age height_seca1 height_chad1 height_DL weight_alog1
1 F 19 1800 1797 180 70.0
2 F 19 1682 1670 167 69.0
3 F 21 1765 1765 178 80.0
4 F 21 1829 1833 181 74.0
5 F 21 1706 1705 170 103.0
6 F 18 1607 1606 160 76.0
7 F 19 1578 1576 156 50.0
8 F 19 1577 1575 156 61.0
9 F 21 1666 1665 166 52.0
10 F 17 1710 1716 172 65.0
11 F 28 1616 1619 161 65.5
12 F 22 1648 1644 165 57.5
13 F 19 1569 1570 155 55.0
14 F 19 1779 1777 177 55.0
15 M 18 1773 1772 179 70.0
16 M 18 1816 1809 181 81.0
17 M 19 1766 1765 178 77.0
18 M 19 1745 1741 174 76.0
19 M 18 1716 1714 170 71.0
20 M 21 1785 1783 179 64.0
21 M 19 1850 1854 185 71.0
22 M 31 1875 1880 188 95.0
23 M 26 1877 1877 186 105.5
24 M 19 1836 1837 185 100.0
25 M 18 1825 1823 182 85.0
26 M 19 1755 1754 174 79.0
27 M 26 1658 1658 165 69.0
28 M 20 1816 1818 183 84.0
29 M 18 1755 1755 175 67.0"),
sep = " ", header = TRUE)
which(grepl(1578, mydata_2$height_seca1))
La sortie est:
> which(grepl(1578, mydata_2$height_seca1))
[1] 7
>
[Edit] Cependant, comme indiqué dans les commentaires, cela capturera beaucoup plus que la chaîne 1578 (par exemple, elle correspond également à 21578, etc.) et ne devrait donc être utilisée que si vous êtes certain de la longueur des valeurs que vous recherchez. ne sera pas plus grand que les quatre caractères ou chiffres montrés ici.
Et la sous-définition selon l'autre réponse fonctionne également très bien:
mydata_2[mydata_2$height_seca1 == 1578, ]
sex age height_seca1 height_chad1 height_DL weight_alog1
7 F 19 1578 1576 156 50
>
Si vous recherchez plusieurs valeurs différentes, vous pouvez les mettre dans un vecteur puis utiliser le %in%
opérateur:
look.for <- c(1578, 1658, 1616)
> mydata_2[mydata_2$height_seca1 %in% look.for, ]
sex age height_seca1 height_chad1 height_DL weight_alog1
7 F 19 1578 1576 156 50.0
11 F 28 1616 1619 161 65.5
27 M 26 1658 1658 165 69.0
>
Si vous voulez connaître la ligne et la colonne d'une valeur dans un matrix
ou data.frame
, pensez à utiliser le arr.ind=TRUE
argument de which
:
> which(mydata_2 == 1578, arr.ind=TRUE)
row col
7 7 3
Donc, 1578 se trouve à la colonne 3 (que vous connaissez déjà) et à la ligne 7.
Au lieu de 1:nrow(mydata_2)
, vous pouvez simplement utiliser la fonction which()
: which(mydata_2[,4] == 1578)
Bien que, comme il a été souligné ci-dessus, la 3ème colonne contienne 1578 et non la quatrième: which(mydata_2[,3] == 1578)
(1:nrow(mydata_2))[mydata_2[,4] == 1578]
Bien sûr, il peut y avoir plus d’une ligne avec une valeur de 1578.
A partir de R 3.3.0, on peut utiliser startsWith()
comme alternative plus rapide à grepl()
:
which(startsWith(mydata_2$height_seca1, 1578))