Return row of Data Frame based on value in a column - R

My R data.frame df looks like:

 Name Amount 1 "A" 150 2 "B" 120 3 "C" "NA" 4 "D" 160 . . . 

I want to get the Name and Amount row when I do something like min(df$Amount).

That gets me the minimum number in the Amount column, but how do I get the Name in that same row? Or the entire row for that matter?

Name should be "B" in this case.

Similar to Select * Where Amount = min(Amount)

What is the best way to do this in R?

1

4 Answers

@Zelazny7's answer works, but if you want to keep ties you could do:

df[which(df$Amount == min(df$Amount)), ] 

For example with the following data frame:

df <- data.frame(Name = c("A", "B", "C", "D", "E"), Amount = c(150, 120, 175, 160, 120)) df[which.min(df$Amount), ] # Name Amount # 2 B 120 df[which(df$Amount == min(df$Amount)), ] # Name Amount # 2 B 120 # 5 E 120 

Edit: If there are NAs in the Amount column you can do:

df[which(df$Amount == min(df$Amount, na.rm = TRUE)), ] 
0

Use which.min:

df <- data.frame(Name=c('A','B','C','D'), Amount=c(150,120,175,160)) df[which.min(df$Amount),] > df[which.min(df$Amount),] Name Amount 2 B 120 

From the help docs:

Determines the location, i.e., index of the (first) minimum or maximum of a numeric (or logical) vector.

5

Based on the syntax provided

 Select * Where Amount = min(Amount) 

You could do using:

 library(sqldf) 

Using @Kara Woo's example df

 sqldf("select * from df where Amount in (select min(Amount) from df)") #Name Amount #1 B 120 #2 E 120 
1

You could use dplyr:

df %>% group_by("Amount") %>% slice(which.min(x)) 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like