Я хочу получить максимальные позиции в кадре данных с разбивкой по факторам, чтобы я мог взять значения этих позиций в дополнительном кадре данных.Как пример.Допустим, у меня есть этот DF:
df1=data.frame(groups=c('a','a','b','b','b','c'), c1=c(1:6), c2=c(2:7), c3=c(4:9))
print(df1)
row. groups c1 c2 c3
1. a 1 2 4
2. a 2 3 5
3. b 3 4 6
4. b 4 5 7
5. b 5 6 8
6. c 6 7 9
aggregate(df1[,2:4], by=list(df1$groups), FUN=max)
Group.1 c1 c2 c3
1. a 2 3 5
2. b 5 6 8
3. c 6 7 9
Как я обнаружил, найти максимальное значение для каждого столбца по группе легко.Но теперь я хочу, чтобы позиция агрегированного максимума использовалась в дополнительном кадре данных, так что если:
df2=cbind(df1$groups,0-df1[,2:4])
print(df2)
df1$groups c1 c2 c3
1. a -1 -2 -4
2. a -2 -3 -5
3. b -3 -4 -6
4. b -4 -5 -7
5. b -5 -6 -8
6. c -6 -7 -9
я хочу значение в df2, которое является максимальным в df1.Например:
Group.1 c1 c2 c3
1. a -2 -3 -5
2. b -5 -6 -8
3. c -6 -7 -9
(Это искажение, сделанное только для примера. Мои исходные данные более сложны, но это то, что мне нужно)
Между тем я сделал двойной цикл, ноэто действительно недостаточно эффективно.
Я использую:
R version 3.4.2 (2017-09-28) -- "Short Summer"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)