如何在提取和处理数据帧的子集后获取原始行索引

时间:2016-10-05 23:37:39

标签: r dataframe

我有一个数据框

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.但是有没有正确的方法呢?

2 个答案:

答案 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