Вернуть строку данных в зависимости от значения в столбце - 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))