我想在我的矢量中找到一个项目的位置,结果很难:
我的数据表包含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]])
产生每个选定年份的最大值,但我不知道如何获得该位置,即行索引。
任何帮助表示赞赏! 最好 约亨
答案 0 :(得分:3)
请尝试以下操作。 .I
是data.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
是一个内部变量,用于存储每个组行的索引。