Извлечь строку, соответствующую минимальному значению переменной, по группе
Я хочу (1) сгруппировать данные по одной переменной (State
), (2) внутри каждой группы найдите строку минимального значения другой переменной (Employees
) и (3) извлечь всю строку.
(1) и (2) простые однострочники, и я чувствую, что (3) тоже должно быть, но я не могу этого понять.
Вот пример набора данных:
> data
State Company Employees
1 AK A 82
2 AK B 104
3 AK C 37
4 AK D 24
5 RI E 19
6 RI F 118
7 RI G 88
8 RI H 42
data <- structure(list(State = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L), .Label = c("AK", "RI"), class = "factor"), Company = structure(1:8, .Label = c("A",
"B", "C", "D", "E", "F", "G", "H"), class = "factor"), Employees = c(82L,
104L, 37L, 24L, 19L, 118L, 88L, 42L)), .Names = c("State", "Company",
"Employees"), class = "data.frame", row.names = c(NA, -8L))
подсчитыватьmin
по группе легко, используяaggregate
:
> aggregate(Employees ~ State, data, function(x) min(x))
State Employees
1 AK 24
2 RI 19
...или жеdata.table
:
> library(data.table)
> DT <- data.table(data)
> DT[ , list(Employees = min(Employees)), by = State]
State Employees
1: AK 24
2: RI 19
Но как мне извлечь всю строку, соответствующую этимmin
значения, то есть также включаяCompany
в результате?