如何找到数据框中每个位置 (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))
我在三列数据框(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))