Как выбрать индекс мин строки в кадре данных? - PullRequest
0 голосов
/ 05 сентября 2018

У меня ниже фрейма данных, и я хочу получить минимальный индекс строки при определенных условиях

collect_date         a     b 
--------------------------
2018-09-04 14:00     1     1
2018-09-04 15:00     1     1
2018-09-04 16:00     1     1
2018-09-05 17:00     1     1
2018-09-05 18:00     1     1
2018-09-05 01:00     1     0
2018-09-05 02:00     1     0

и я хочу выбрать минимальный порядковый номер самой низкой строки, когда 2018-09-05 & b == 0? Я пробовал min (который (....)), но он не соответствует тому, что я хочу получить.
Как мне это сделать? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Я предполагаю, что вы хотите # 6 в качестве вывода,

library(data.table)
df <- fread("collect_date    a     b 
        2018-09-04      1     1
        2018-09-04      1     1
        2018-09-04      1     1
        2018-09-05      1     1
        2018-09-05      1     1
        2018-09-05      1     0
        2018-09-05      1     0") 
df <- as.data.frame(df)

Это даст вам то, что вы хотите,

min(which(df$collect_date == "2018-09-05" & df$b == 0))

Или, как упоминал @Ronak Shah,

which.max(df$collect_date == "2018-09-05" & df$b == 0)

даст вам тот же ответ

0 голосов
/ 05 сентября 2018

«Индекс» - это позиция в массиве, которая отличается от имен строк и столбцов. Ваше решение зависит от "row.names" и "names" и не возвращает индекс. Более безопасный способ сделать это (особенно на больших массивах):

(df <- data.frame (x = runif (10), y = runif (10))) </p>

Возвращает индекс мин Кол

  which.min(apply(df,MARGIN=2,min))

Возврат мин. Индекс строки

  which.min(apply(df,MARGIN=1,min))

Если вы затем хотели связать имя столбца или строки, вы можете использовать этот индекс с names () или rownames ().

Имя столбца с минимальным значением

names(df)[which.min(apply(df,MARGIN=2,min))]

Имя строки с минимальным значением

rownames(df)[which.min(apply(df,MARGIN=1,min))]
...