获取R中查询元素的行索引

时间:2014-04-17 08:07:41

标签: r data.table

我想在我的矢量中找到一个项目的位置,结果很难:

我的数据表包含5列

                   ts Q_m3s Baseflow_r1 Baseflow_r2 leer_1 year
 1: 1965-01-01 00:00:00   156         156         150      0   65
 2: 1965-01-01 01:00:00   155         155         150      0   65
 3: 1965-01-01 02:00:00   154         154         150      0   65
 4: 1965-01-01 03:00:00   154         154         150      0   65
 5: 1965-01-01 04:00:00   153         153         150      0   65
 6: 1965-01-01 05:00:00   152         152         150      0   65

第一列ts转换为POSIXct元素

dt <- data.table(data) # convert to data table 
dt[,ts:=as.POSIXct(ts, format="%m%d%Y %H:%M")] # convert to POSIXct
# get year
dt[, ':='(year=as.POSIXlt(ts)$year)]

我现在想要获得给定年份中最大值的POSITION。

表达式max(dt$Q_m3s[dt[,year==105]])产生每个选定年份的最大值,但我不知道如何获得该位置,即行索引。

任何帮助表示赞赏! 最好 约亨

2 个答案:

答案 0 :(得分:3)

请尝试以下操作。 .Idata.table特定的内部变量,您可以在data.table提取的j参数中使用。

require(data.table)

set.seed(123)
DT <- data.table(year = rep(1:5, each = 3), var = sample(1:15))
DT
##     year var
##  1:    1   5
##  2:    1  12
##  3:    1   6
##  4:    2  11
##  5:    2  14
##  6:    2   1
##  7:    3  15
##  8:    3   8
##  9:    3   4
## 10:    4   3
## 11:    4   9
## 12:    4   2
## 13:    5  13
## 14:    5   7
## 15:    5  10


DT[, .I[which.max(var)], by=year]
##    year V1
## 1:    1  2
## 2:    2  5
## 3:    3  7
## 4:    4 11
## 5:    5 13   

答案 1 :(得分:1)

如果它只是个别年份(而不是每年一年),那么

which(dt$year==105)[which.max(df$Q_m3s[dt$year==105])]

应该有效 - 括号中的表达式在q_m3s的最大值的对应于year == 105的行中找到索引,然后我们在整个数据集中找到相应的索引。

如果你正在寻找每年的最大值,那么表达式就是

.I[which.max(df$Q_m3s)], by=year

将为您提供每年最大Q_m3s的整个数据集中的索引 - .I是一个内部变量,用于存储每个组行的索引。