如何在 R 中的向量的不同范围内应用函数?

How to apply a function in different ranges of a vectror in R?

我有以下矩阵:

x=matrix(c(1,2,2,1,10,10,20,21,30,31,40,
           1,3,2,3,10,11,20,20,32,31,40,
           0,1,0,1,0,1,0,1,1,0,0),11,3)

我想为 x 中第一列的每个唯一值找到第三列的最大值(在具有 x 中第一列的该值的所有记录中)在 x.

我创建了以下代码:

v1 <- sequence(rle(x[,1])$lengths)
A=split(seq_along(v1), cumsum(v1==1))
A_diff=rep(0,length(split(seq_along(v1), cumsum(v1==1))))
for( i in 1:length(split(seq_along(v1), cumsum(v1==1))) )
{
A_diff[i]=max(x[split(seq_along(v1), cumsum(v1==1))[[i]],3])
}

但是,仅当第一列中的相同元素连续时(因为我使用 rle)并且我使用 for 循环,提供的代码才有效。

那么,在没有 for 循环的情况下,我怎样才能使它正常工作,即使用函数?

如果我没理解错的话

> tapply(x[,3],x[,1],max)

 1  2 10 20 21 30 31 40 
 1  1  1  0  1  1  0  0 

为了对 1 个以上的变量进行分组,我会进行聚合,请注意,矩阵对于此目的来说很麻烦,我建议您将其转换为数据框,尽管如此

> aggregate(x[,3],list(x[,1],x[,2]),max)