Как найти номер строки в R-коде

В следующем наборе значений, как я могу найти номер строки определенного значения в столбце 4??

Например, как я могу найти номер строки значения "1578" в столбце номер 4 с помощью команд кода 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

Ответы

Ответ 1

У меня возникнет соблазн использовать grepl, который должен давать все строки со значениями и может быть обобщен для произвольных строк.

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))

Вывод:

> which(grepl(1578, mydata_2$height_seca1))
[1] 7
> 

[Edit] Однако, как указано в комментариях, это будет захватывать гораздо больше, чем строка 1578 (например, она также соответствует 21578 и т.д.), и поэтому ее следует использовать, только если вы уверены, что вы используете длину значений вы ищете не будет больше четырех символов или цифр, показанных здесь.

И подмножество в соответствии с другим ответом также отлично работает:

mydata_2[mydata_2$height_seca1 == 1578, ]
  sex age height_seca1 height_chad1 height_DL weight_alog1
7   F  19         1578         1576       156           50
> 

Если вы ищете несколько разных значений, вы можете поместить их в вектор, а затем использовать оператор %in%:

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
> 

Ответ 2

Если вы хотите знать строку и столбец значения в matrix или data.frame, рассмотрите аргумент arr.ind=TRUE в which:

> which(mydata_2 == 1578, arr.ind=TRUE)
  row col
7   7   3

Итак, 1578 находится в столбце 3 (который вы уже знаете) и в строке 7.

Ответ 3

Вместо 1:nrow(mydata_2) вы можете просто использовать функцию which(): which(mydata_2[,4] == 1578)

Хотя, как было указано выше, третий столбец содержит 1578, а не четвертый: which(mydata_2[,3] == 1578)

Ответ 4

(1:nrow(mydata_2))[mydata_2[,4] == 1578]

Конечно, может быть более одной строки со значением 1578.

Ответ 5

Начиная с R 3.3.0, можно использовать startsWith() в качестве альтернативы grepl():

which(startsWith(1578, mydata_2$height_seca1))

Ответ 6

Начиная с R 3.3.0, можно использовать startsWith() в качестве более быстрой альтернативы grepl():

which(startsWith(mydata_2$height_seca1, 1578))