Вопрос:
В следующем наборе значений, как я могу найти номер строки определенного значения в столбце 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 Лучший ответ:
У меня возникнет соблазн использовать 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 > Ответ №1
Если вы хотите знать строку и столбец значения в matrix или data.frame, рассмотрите аргумент arr.ind=TRUE в which:
> which(mydata_2 == 1578, arr.ind=TRUE) row col 7 7 3
Итак, 1578 находится в столбце 3 (который вы уже знаете) и в строке 7.
Ответ №2
Вместо 1:nrow(mydata_2) вы можете просто использовать функцию which(): which(mydata_2[,4] == 1578)
Хотя, как было указано выше, третий столбец содержит 1578, а не четвертый:
which(mydata_2[,3] == 1578)
Ответ №3(1:nrow(mydata_2))[mydata_2[,4] == 1578]
Конечно, может быть более одной строки со значением 1578.
Ответ №4
Начиная с R 3.3.0, можно использовать startsWith() в качестве альтернативы grepl():
which(startsWith(1578, mydata_2$height_seca1)) Ответ №5
Начиная с R 3.3.0, можно использовать startsWith() в качестве более быстрой альтернативы grepl():
which(startsWith(mydata_2$height_seca1, 1578))