【问题标题】:How can I select min row index from dataframe?如何从数据框中选择最小行索引?
【发布时间】:2019-02-10 07:12:40
【问题描述】:

我有以下数据框,我想获得最小行索引 在特定条件下

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(....)) 但它与我想要的不匹配。
我该怎么做?提前谢谢!

【问题讨论】:

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

标签: r indexing min


【解决方案1】:

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

( df

返回最小列索引

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

【讨论】:

  • 嘿,你可以用** WORD ** 代替# WORD 让它变得“大”。
【解决方案2】:

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

会给你同样的答案

【讨论】:

  • 对不起,我改变了问题..收集日期有数据和时间信息..然后我尝试了这个解决方案,但很奇怪..你能测试改变的问题吗?
  • 随着时间的增加,阅读的时候你有一个新的专栏。尝试创建一个采用as.POSIXct(paste(df[, 1], df[, 2])) 的新data.frame,然后应用相同的过程。
猜你喜欢
  • 2018-12-25
  • 2017-08-27
  • 2019-01-10
  • 2017-10-04
  • 2016-11-09
  • 2017-04-01
  • 2020-08-07
  • 2022-07-08
  • 2020-03-02
相关资源
最近更新 更多