我有一个数据框
reset
我想找到第10行和第20行之间存在的最大值。但我想找到该最大值的原始索引。
df<-structure(list(time = structure(c(1080868500, 1080868800, 1080869100,
1080869400, 1080869700, 1080870000, 1080870300, 1080870600, 1080870900,
1080871200, 1080871500, 1080871800, 1080872100, 1080872400, 1080872700,
1080873000, 1080873300, 1080873600, 1080873900, 1080874200, 1080874500,
1080874800, 1080875100, 1080875400, 1080875700, 1080876000, 1080876300,
1080876600, 1080876900, 1080877200, 1080877500, 1080877800, 1080878100,
1080878400, 1080878700, 1080879000, 1080879300, 1080879600, 1080879900,
1080880200, 1080880500, 1080880800, 1080881100, 1080881400, 1080881700,
1080882000, 1080882300, 1080882600, 1080882900, 1080883200), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), precip = c(1.76, 1.76, 1.21, 0.78,
0.59, 0.59, 0.62, 0.62, 0.81, 0.81, 1.14, 0.82, 0.87, 1.03, 0.98,
0.77, 0.77, 0.45, 0.55, 0.82, 0.8, 0.58, 0.7, 0.7, 1.03, 1.25,
1.32, 1.68, 2.6, 1.49, 3.85, 3.91, 2.94, 3.63, 4.12, 1.85, 2.02,
3.46, 3.45, 2.53, 2.88, 3, 2.42, 1.56, 1.44, 1.43, 1.33, 1.27,
1.35, 1.4)), .Names = c("time", "precip"), row.names = 236752:236801, class = "data.frame")
给出了索引2.我知道我可以将它添加到行索引10.但是有没有正确的方法呢?
答案 0 :(得分:2)
只是(10:20)[2]
。
现在考虑一个更复杂的案例:
set.seed(0)
index <- sample(1:nrow(df), 10) ## a random subset of size 10
pos <- which.max(df[index,"precip"]) ## position in the subset data frame
# [1] 5
index[pos] ## position in the original data frame
# [1] 42
感谢。你能解释为什么这是一个更复杂的案例吗?看起来和我的情况一样。
如果index = 10:20
连续且排序越来越多,您可以添加10 + 2 = 12
。但在我的情况下index
不连续(甚至没有排序):
# [1] 45 14 18 27 42 10 40 41 28 26
您无法在原始数据框中添加行号。
答案 1 :(得分:0)
这似乎是一种使用逻辑索引的合理简单方法,其中两个条件都集中在第10行到第20行:
df[rownames(df) %in% rownames(df)[10:20] & df$precip == max(df$precip[10:20]), ]
#--------------
time precip
236762 2004-04-02 02:05:00 1.14
如果你只是一个rowname&#34; 236762&#34;你可以围绕该数据帧值包装rownames()。您可以使用rownames索引数据框,在这种情况下,您会看到:
df["236762" , ] # note the need for quoting. The name is a character value.
#
# time precip
#236762 2004-04-02 02:05:00 1.14