Нахождение двух самых высоких значений в строке и затем значений в одном и том же столбце, но в другой строке - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть фрейм данных, и проблема в том, что я хочу найти два наивысших значения в строке и затем сравнить эти значения с тем, что имеет другая строка в этих столбцах.


rows <- c("a","b","c","d","e","f","g","h","i")
x1 <- c(1,4,5,7,5,8,9,0,5)
x2 <- c(3,3,5,6,7,8,9,0,7)
x3 <- c(3,1,4,6,7,8,9,5,2)


df <- data.frame(x1=x1,x2=x2, x3=x3, row.names = rows)

Здесь я получаю двасамые высокие значения из строки "a"

sort(df["a",], decreasing = TRUE)[1:2]

Тогда я бы хотел найти значения в строке "e", которая принадлежит этим столбцам, где "a" имеют верхние 2 значения (и в том же порядке).

Ответы [ 2 ]

2 голосов
/ 28 сентября 2019

1) order, примененный к строке a, дает вектор, который при использовании в качестве индекса к его аргументу даст его в отсортированном порядке, поэтому примените его к строке e и возьмите последний2 элемента.

o <- order( df["a", ] )
tail(unlist( df["e", o] ), 2)
## x2 x3 
##  7  7 

2) Другая возможность, если s - результат, показанный в вопросе, заключается в индексировании df по его именам.

s <- sort(df["a",], decreasing = TRUE)[1:2]
df["e", names(s)]
## x2 x3 
##  7  7 
0 голосов
/ 28 сентября 2019

Я не знаком с r, но с теоретической точки зрения вам нужен алгоритм, который меняет местами весь столбец на основе двух наивысших значений a.

После этого вам понадобятся значения в других строках.для сравнения всегда будет в столбцах 1 и 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...