найти индекс максимального значения в R
17862 просмотра
4 ответа
У меня есть следующий фрейм данных называется surge
:
MeshID StormID Rate Surge Wind
1 1412 1.0000E-01 0.01 0.0
2 1412 1.0000E-01 0.03 0.0
3 1412 1.0000E-01 0.09 0.0
4 1412 1.0000E-01 0.12 0.0
5 1412 1.0000E-01 0.02 0.0
6 1412 1.0000E-01 0.02 0.0
7 1412 1.0000E-01 0.07 0.0
1 1413 1.0000E-01 0.06 0.0
2 1413 1.0000E-01 0.02 0.0
3 1413 1.0000E-01 0.05 0.0
Я использовал следующий код, чтобы найти максимальное значение помпажа на шторм:
MaxSurge <- data.frame(tapply(surge[,4], surge[,2], max))
Возвращает:
1412 0.12
1413 0.06
Это здорово, за исключением того, что я также хотел бы включить MeshID
значение в точке, где помпаж является максимальным. Я знаю, что могу, вероятно, использовать which.max
, но я не могу понять, как привести это в действие. Я ОЧЕНЬ новичок в программировании на R.
Ответы (4)
7 плюса
Если у вас есть максимум 2 data.points, which.max
будет ссылаться только на первый. Более полное решение будет включать rank
:
# data with a tie for max
surge <- data.frame(MeshID=c(1:7,1:4),StormID=c(rep(1412,7),
rep(1413,4)),Surge=c(0.01,0.03,0.09,0.12,0.02,0.02,0.07,0.06,0.02,0.05,0.06))
# compute ranks
surge$rank <- ave(-surge$Surge,surge$StormID,FUN=function(x) rank(x,ties.method="min"))
# subset on the rank
subset(surge,rank==1)
MeshID StormID Surge rank
4 4 1412 0.12 1
8 1 1413 0.06 1
11 4 1413 0.06 1
Автор: James
Размещён: 03.10.2012 01:08
13 плюса
И data.table
решение для кодирования элегантности
library(data.table)
surge <- as.data.table(surge)
surge[, .SD[which.max(surge)], by = StormID]
Автор: mnel
Размещён: 04.10.2012 03:31
13 плюса
вот еще одно решение для data.table, но не опирающееся на .SD (таким образом, в 10 раз быстрее)
surge[,grp.ranks:=rank(-1*surge,ties.method='min'),by=StormID]
surge[grp.ranks==1,]
Автор: massyah
Размещён: 18.10.2012 12:48
6 плюса
Вот решение Plyr, просто потому, что кто- то скажет это, если я не ...
R> ddply(surge, "StormID", function(x) x[which.max(x$Surge),])
MeshID StormID Rate Surge Wind
1 4 1412 0.1 0.12 0
2 1 1413 0.1 0.06 0
Автор: Joshua Ulrich
Размещён: 03.10.2012 11:23
Вопросы из категории :
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- r Участки без заголовков / надписей в R
- r Расчет скользящей средней
- r Режим Emacs ESS - вкладка для области комментариев
- r Преобразование данных из многих строк во многие столбцы
- r Проверить, содержит ли вектор данный элемент
- r Поиск всех позиций для нескольких элементов в векторе
- dataframe Разница между скобками [] и двойной скобкой [[]] для доступа к элементам списка или кадра данных
- dataframe Уровни коэффициента отбрасывания в заданном кадре данных
- dataframe Как отсортировать фрейм данных по нескольким столбцам
- dataframe Как объединить (объединить) кадры данных (внутренний, внешний, левый, правый)?
- dataframe Фильтрация строк данных.файла по логическому условию
- dataframe Изменение формы data.frame из широкого в длинный формат
- dataframe Как преобразовать столбец фрейма данных в числовой тип?
- dataframe R: Какой самый простой способ распечатать пары значений из data.frame?
- dataframe R: Как записать data.frame, чтобы я мог вставить его в SO, чтобы другие могли его прочитать?