如何找到数据框中每个位置 (x) 的值的最大索引 (z)?

How do I find the max index (z) of a value for each position (x) with in a data frame?

我在三列数据框(x、z、值)中有一系列数据,如下所示:

x <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
z <- c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5)
value <- c(0,8,4,2,0,0,1,7,0,2,1,2,3,0,4)

df <- cbind(x, z, value)
df <- data.frame(df)
print(df)

> df
 x z value
 1 1     0
 1 2     8
 1 3     4
 1 4     2
 1 5     0
 2 1     0
 2 2     1
 2 3     7
 2 4     0
 2 5     2
 3 1     1
 3 2     2
 3 3     3
 3 4     0
 3 5     4

我需要做的是为每个位置 x 找到 z 的最大值,其中该值仍然是一个数字(即在它达到最终零之前;每个值的数据中间都有零- -我对最后一个值感兴趣)。在我的数据集中,完整的数据集是 50 x 25 (x,z)。理想的输出是这样的:

     x max.z
[1,] 1     4
[2,] 2     5
[3,] 3     5

真的很想在没有 for 循环的情况下执行此操作...无论哪种方式,我都感谢您的投入!

df2 = df[df$value != 0,]
t(sapply(split(df2, df2$x), function(a) a[NROW(a),1:2]))
#  x y
#1 1 4
#2 2 5
#3 3 5

这是一个 dplyr 解决方案:

df %>% group_by(x) %>% filter(value != 0) %>% summarize(max.z=max(z))