如何从数据框中选择最小行索引?

时间:2018-09-05 08:00:36

标签: r indexing min

我有下面的数据框,我想获得最小的行索引 在某些条件下

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(which(....)),但与我要获取的内容不匹配。
我该怎么做?预先谢谢你!

2 个答案:

答案 0 :(得分:0)

“索引”是数组中的位置,与行和列的名称不同。您的解决方案取决于“ row.names”和“ names”,并且不返回索引。一种更安全的方法(尤其是在大型阵列上)是:

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

返回最小col索引

  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))]

答案 1 :(得分:0)

我假设您希望将#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)

会给您相同的答案