# How to Use the Which Function in R (With Examples)

The which() function in R returns the position of elements in a logical vector that are TRUE.

This tutorial provides several examples of how to use this function in practice.

### Example 1: Find Elements in a Vector

The following code shows how to find the position of all elements in a vector that are equal to 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)

 8 9```

We can see that the elements in positions 8 and 9 in the vector are equal to the value 5.

We can also find the position of all elements in a vector that are not equal to 5:

```#find the position of all elements not equal to 5
which(data != 5)

  1  2  3  4  5  6  7 10
```

We can also find which elements are between two values or outside of two values:

```#find the position of all elements with values between 2 and 4
which(data >= 2 & data <= 4)

 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  8  9 10```

### Example 2: Count Occurrences in a Vector

The following code shows how to use the length() function to find the number of elements in a vector that are greater than some value:

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

 3
```

We can see that there are 3 elements in this vector with values greater than 4.

### Example 3: Find Rows in a Data Frame

The following code shows how to return the row in a data frame that contains the max or min value in a certain column:

```#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
```

### Example 4: Subset by Rows in a Data Frame

The following code shows how to subset a data frame by rows that meet a certain criteria:

```#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
```