# The `which()` Function in R

rtip
which
Author

Steven P. Sanderson II, MPH

Published

May 18, 2023

# Introduction:

As a programmer, one of the most important tasks is to extract valuable insights from data. To make this process efficient, it is crucial to have a reliable tool at your disposal. Enter the `which()` function in R. This versatile function allows you to locate specific elements within a vector or a data frame, helping you filter and analyze data with ease. In this blog post, we’ll explore the ins and outs of the `which()` function, discussing its syntax, common use cases, and providing practical examples to solidify your understanding.

# Understanding the Syntax:

Before diving into real-world examples, let’s grasp the basic syntax of the `which()` function. The general structure of the function is as follows:

``which(logical_vector, arr.ind = FALSE)``

The `logical_vector` parameter represents the condition or logical expression you want to evaluate. It can be any expression that returns a logical vector, such as a comparison or logical operation. The optional `arr.ind` parameter, when set to `TRUE`, returns the result in array indices instead of a vector, that is to say that the `which()` function will return a vector of integers that correspond to the positions of the elements in the vector that satisfy the condition.

# Example 1: Locating Elements in a Numeric Vector

Suppose we have a numeric vector called scores, representing test scores of students. We want to find the indices of scores greater than or equal to 90. Here’s how we can accomplish that using the `which()` function:

``````scores <- c(85, 92, 88, 94, 79, 91, 87, 98, 84, 90)
indices <- which(scores >= 90)
indices``````
``  2  4  6  8 10``

In this example, the `which()` function evaluates the logical expression scores >= 90 and returns the indices of the elements satisfying the condition. The resulting indices vector will contain `[2, 4, 6, 8, 10]`, indicating the positions of the scores that meet the criteria.

# Example 2: Filtering Data Frames

Data frames are widely used in data analysis. The which() function can be incredibly useful when working with data frames to filter rows based on specific conditions. Consider the following example:

``````data <- data.frame(Name = c("Alice", "Bob", "Charlie", "Dave"),
Age = c(25, 32, 28, 30),
City = c("New York", "London", "Paris", "Sydney"))

selected_rows <- which(data\$Age >= 30)
filtered_data <- data[selected_rows, ]
filtered_data``````
``````  Name Age   City
2  Bob  32 London
4 Dave  30 Sydney``````

In this case, we use the `which()` function to find the rows where the Age column is greater than or equal to 30. The selected_rows vector will hold the indices `[2, 4]`, which we subsequently use to filter the original data frame. The resulting filtered_data will contain the rows corresponding to the selected indices, in this case, rows for Bob and Dave.

# Example 3: Using the arr.ind Parameter

The arr.ind parameter of the which() function comes in handy when working with multi-dimensional arrays. It allows you to obtain the indices as an array instead of a vector. Let’s illustrate this with an example:

``````matrix_data <- matrix(1:12, nrow = 3, ncol = 4)
selected_indices <- which(matrix_data %% 3 == 0, arr.ind = TRUE)
selected_indices``````
``````     row col
[1,]   3   1
[2,]   3   2
[3,]   3   3
[4,]   3   4``````

In this example, we create a matrix called `matrix_data` and use the `which()` function to find the indices where the matrix elements are divisible by 3. By setting `arr.ind = TRUE`, we obtain a matrix of indices, where each row represents the position of an element satisfying the condition.

# Conclusion:

The `which()` function in R proves to be an invaluable tool for data exploration and filtering. By allowing you to locate specific elements in vectors or data frames, it simplifies the process of extracting relevant information from your data. Throughout this blog post, we explored the syntax and various practical examples of using the `which()` function. Armed with this knowledge, you can now confidently apply the `which()` function to your own data analysis tasks in R, boosting your productivity and uncovering hidden insights with ease.