Функция which() в R возвращает позицию элементов в логическом векторе, которые имеют значение TRUE .
В этом руководстве представлено несколько примеров использования этой функции на практике.
Пример 1: поиск элементов в векторе
Следующий код показывает, как найти позицию всех элементов в векторе, равных 5:
#create data
data <- c(1, 2, 2, 3, 4, 4, 4, 5, 5, 12)
#find the position of all elements equal to 5
which (data == 5)
[1] 8 9
Мы видим, что элементы в позициях 8 и 9 в векторе равны значению 5.
Мы также можем найти положение всех элементов в векторе, которые не равны 5:
#find the position of all elements *not* equal to 5
which (data != 5)
[1] 1 2 3 4 5 6 7 10
Мы также можем найти, какие элементы находятся между двумя значениями или вне двух значений:
#find the position of all elements with values between 2 and 4
which (data >= 2 & data <= 4)
[1] 2 3 4 5 6 7
#find the position of all elements with values outside of 2 and 4
which (data < 2 | data > 4)
[1] 1 8 9 10
Пример 2. Подсчет вхождений в векторе
В следующем коде показано, как использовать функцию length() для поиска количества элементов в векторе, превышающих некоторое значение:
#create data
data <- c(1, 2, 2, 3, 4, 4, 4, 5, 5, 12)
#find number of elements greater than 4
length ( which (data > 4))
[1] 3
Мы видим, что в этом векторе есть 3 элемента со значениями больше 4.
Пример 3. Поиск строк во фрейме данных
В следующем коде показано, как вернуть строку во фрейме данных, содержащую максимальное или минимальное значение в определенном столбце:
#create data frame
df <- data.frame(x = c(1, 2, 2, 3, 4, 5),
y = c(7, 7, 8, 9, 9, 9),
z = c('A', 'B', 'C', 'D', 'E', 'F'))
#view data frame
df
x y z
1 1 7 A
2 2 7 B
3 2 8 C
4 3 9 D
5 4 9 E
6 5 9 F
#return row that contains the max value in column *x*
df[ which.max (df$x), ]
x y z
6 5 9 F
#return row that contains the min value in column *x*
df[ which.min (df$x), ]
x y z
1 1 7 A
Пример 4: Подмножество строк во фрейме данных
В следующем коде показано, как подмножить фрейм данных по строкам, которые соответствуют определенным критериям:
#create data frame
df <- data.frame(x = c(1, 2, 2, 3, 4, 5),
y = c(7, 7, 8, 9, 9, 9),
z = c('A', 'B', 'C', 'D', 'E', 'F'))
#view data frame
df
x y z
1 1 7 A
2 2 7 B
3 2 8 C
4 3 9 D
5 4 9 E
6 5 9 F
#return subset of data frame where values in column y are greater than 8
df[ which (df$y > 8), ]
x y z
4 3 9 D
5 4 9 E
6 5 9 F
Найдите больше руководств по R на этой странице .