Вернуть строку данных в зависимости от значения в столбце - R

My R data.frame df выглядит следующим образом:

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

Я хочу получить строку Name и Amount, когда я делаю что-то вроде min(df$Amount).

Это дает мне минимальное число в столбце "Сумма", но как мне получить имя в той же строке? Или вся строка в этом отношении?

В этом случае имя должно быть "B".

Аналогично Select * Where Amount = min(Amount)

Каков наилучший способ сделать это в R?

Ответы

Ответ 1

@Ответ на Zelazny7 работает, но если вы хотите сохранить галстуки, вы можете сделать:

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

Например, со следующим фреймом данных:

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

Изменить: Если в столбце Amount есть NA, вы можете сделать:

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

Ответ 2

Используйте 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

В справочных документах:

Определяет местоположение, то есть индекс (первого) минимума или максимума числового (или логического) вектора.

Ответ 3

На основе предоставленного синтаксиса

 Select * Where Amount = min(Amount)

Вы можете использовать:

 library(sqldf)

Использование примера @Kara Woo df

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

Ответ 4

Вы можете использовать dplyr:

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