#r #list
#r #Список
Вопрос:
У меня есть список, который содержит векторы длиной 2, первый элемент вектора обозначает один тип данных, а второй — второй тип данных
[[1]]
[1] "51224.99" "0.879"
[[2]]
[1] "51224.50" "0.038"
[[3]]
[1] "51224.00" "0.038"
[[4]]
[1] "51223.50" "0.038"
[[5]]
[1] "51223.00" "0.062"
[[6]]
[1] "51222.50" "0.038"
[[7]]
[1] "51222.00" "0.038"
[[8]]
[1] "51221.86" "0.370"
[[9]]
[1] "51221.82" "0.015"
[[10]]
[1] "51221.50" "0.038"
[[11]]
[1] "51221.44" "2.100"
[[12]]
[1] "51221.39" "0.196"
[[13]]
[1] "51221.00" "0.038"
[[14]]
[1] "51220.50" "0.038"
[[15]]
[1] "51220.19" "0.292"
[[16]]
[1] "51220.00" "0.038"
[[17]]
[1] "51219.97" "0.012"
[[18]]
[1] "51219.62" "0.684"
[[19]]
[1] "51219.50" "0.038"
[[20]]
[1] "51219.02" "2.311"
Мне нужно найти максимальное значение по второму элементу вектора. То есть в конечном результате я должен получить следующий результат:
[1] "51219.02" "2.311"
поскольку максимальное второе число в векторах равно 2.311
Ответ №1:
Предполагая, что ваш список вызван yourList
, вы можете выполнить следующее:
secondValuesNumeric <- as.numeric(sapply(yourList,"[[",2))
maxIndex <- which.max(secondValuesNumeric)
result <- yourList[[maxIndex]]
Ответ №2:
Вы могли бы просто превратить его в dataframe! Вот как я бы это сделал:
(сначала я создаю примерный список, чтобы имитировать ваш):
ex <- purrr::map(seq(12), function(i) c(rnorm(1), rnorm(1)))
Затем вы можете использовать purrr, чтобы превратить его в фрейм данных, и filter для фильтрации туда, где второе значение является максимальным для этого столбца:
purrr::map_df(ex, function(x) data.frame(val1 = x[1], val2 = x[2])) %>%
dplyr::filter(val2 == max(val2))
Вы должны быть в состоянии использовать этот пример ^, заменив ex
на имя вашего списка.
Ответ №3:
Вот вариант с rbind
извлечением второго столбца, преобразованием в числовой, поиском максимального индекса для подмножества list
lst1[which.max(as.numeric(do.call(rbind, lst1)[,2]))]
Комментарии:
1. в моем конкретном случае я хотел бы избежать дополнительных преобразований, лучше все делать в одном формате