Column index of last occurrence of value in each row
我需要确定矩阵的每一行中特定值的首次出现和最终出现??的列索引。例如,如果我的矩阵如下:
1 2 3 | 0 10 10 10 0 0 10 10 10 0 0 0 0 0 0 0 10 10 |
并且我需要一个向量,该向量包含每行中第一次出现的10的列索引和最后一次出现的向量,所得向量分别为
我编写了以下函数,将其与apply函数结合使用以查找第一次出现的情况:
1 2 | Myfunc <- function(x){which==10)[1] Myfirst <- apply(x,1,Myfunc) |
但是,我似乎无法弄清楚如何获得最终出现的矢量。有人可以告诉我如何使用
1 2 | v1 = apply(df,1,function(x){head(which(x==10),1)}) #First v2 = apply(df,1,function(x){tail(which(x==10),1)}) #Last |
一个示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | df = rbind(c(0,10,10,10,0,0),c(10,10,10,0,0,0),c(0,0,0,0,10,10)) > df [,1] [,2] [,3] [,4] [,5] [,6] [1,] 0 10 10 10 0 0 [2,] 10 10 10 0 0 0 [3,] 0 0 0 0 10 10 v1 = apply(df,1,function(x){head(which(x==10),1)}) #First > v1 [1] 2 1 5 > is.vector(v1) [1] TRUE v2 = apply(df,1,function(x){tail(which(x==10),1)}) > v2 [1] 4 3 6 > is.vector(v2) [1] TRUE |
@rmk的答案将起作用(1)。您可能也对doBy软件包感兴趣。它包含一个