如何在 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)
我有以下矩阵:
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)