Получить имена строк максимальных и вторых максимальных значений столбца в R - PullRequest
0 голосов
/ 24 мая 2018

У нас есть это df

# We create the df
x <- c(1,33,5,2,56,1)
y <- c(4,358,57,3,32,2)

df <- as.data.frame(cbind(x,y))

rownames(df) <- c("a", "b", "c", "d", "e", "f")

Значение df:

   x    y
a  1    4
b 33  358
c  5   57
d  2    3
e 56   32
f  1    2

Я хотел бы получить имена строк максимального значения и его второго по величине значения из столбца x и те же имена строк из столбца y.

Таким образом, результатом будет e и b из столбца x и b и c из y column.

Я пробовал эти коды, но безуспешно.

rownames(df)[max(df$x)] # for the maximum value
nx <- length(df$x) # length of the x column
rownames(df)[sort(df$x, partial=nx-1)[nx-1]] # for the second max value

Однако результаты предыдущих трех строк кода:

NA  # what's wrong?
6   # yeah, it is 6
"e" # nope, the second max is "b"

Где находитсяпроблема и как я могу решить эти проблемы?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Мы могли бы перебрать столбцы, order по убыванию, использовать этот индекс для получения имен строк, подмножество первых двух

sapply(df, function(x) head(row.names(df)[order(x, decreasing = TRUE)], 2))
#      x   y  
#[1,] "e" "b"
#[2,] "b" "c"
0 голосов
/ 24 мая 2018

Вы были близки: просто найдите значения

rownames(df[df$x == max(df$x),]) # for the maximum value
nx <- length(df$x) # length of the x column
rownames(df[df$x == sort(df$x, partial=nx-1)[nx-1],]) # for the second max value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...