假设我们有以下矩阵:

M=structure(c(1, 2, 2, 2, 1, 3, 3, 4, 4, 6, 5, 5, 5, 6, 5, 5, 2, 
2, 4, 1, 3, 1, 6, 4, 2, 5, 1, 3, 4, 6, 0.849542987113752, 0.849542987113752, 
0.788371730579003, 0.788371730579003, 0.788371730579003, 0.788371730579003
), .Dim = c(6L, 6L), .Dimnames = list(NULL, c("", "", "", "", 
"index", "cum_detection")))

根据其最后一行对矩阵M进行排序:

             index cum_detection
[1,] 1 3 5 4     2     0.8495430
[2,] 2 4 6 1     5     0.8495430
[3,] 2 4 5 3     1     0.7883717
[4,] 2 6 5 1     3     0.7883717
[5,] 1 5 2 6     4     0.7883717
[6,] 3 5 2 4     6     0.7883717

我正在搜索以获得以下输出:

             index cum_detection
[1,] 1 3 5 4     2     0.8495430
[2,] 0 4 6 1     5     0.8495430
[3,] 0 4 0 3     1     0.7883717
[4,] 0 6 0 0     3     0.7883717
[5,] 0 0 0 6     4     0.7883717
[6,] 0 0 0 0     6     0.7883717

对于每一行,我们搜索从1到4的列.

如果我们发现一个值等于之前访问的行index中的任何一个值,则将其替换为0.

例如,考虑第三行M[3,1:4]:

> M[3,1:4]
  2 4 5 3

25已经出现在先前的行index列(M[1:2,"index"])中.

我相信解决方案是这样的:

 t(apply(M,1,function(x) replace(x,M[1:current_row-1,"index"],0))) 

其中current_rowapply循环的当前行.这里的问题是我不知道怎么弄到apply current row index.

推荐答案

我们可以从‘M’开始循环行序列(从2开始),然后找出是否找到该行的列1:4直到‘index’的前一行(1:(i-1))的行序列,然后将这些列中的值赋给0

for(i in 2:nrow(M)) M[i, 1:4][M[i, 1:4] %in% M[1:(i-1), "index"]] <- 0

-输出

> M
             index cum_detection
[1,] 1 3 5 4     2     0.8495430
[2,] 0 4 6 1     5     0.8495430
[3,] 0 4 0 3     1     0.7883717
[4,] 0 6 0 0     3     0.7883717
[5,] 0 0 0 6     4     0.7883717
[6,] 0 0 0 0     6     0.7883717

或使用dplyr

library(dplyr)
library(tibble)
 M %>%
   as_tibble %>%
   mutate(rn = row_number())  %>% 
   rowwise %>% 
   mutate(across(1:4, ~ replace(.x, .x %in% M[, "index"][
         seq_len(rn - 1)], 0)), rn = NULL) %>%
   ungroup
# A tibble: 6 × 6
     V1    V2    V3    V4 index cum_detection
  <dbl> <dbl> <dbl> <dbl> <dbl>         <dbl>
1     1     3     5     4     2         0.850
2     0     4     6     1     5         0.850
3     0     4     0     3     1         0.788
4     0     6     0     0     3         0.788
5     0     0     0     6     4         0.788
6     0     0     0     0     6         0.788

R相关问答推荐

基于shiny 应用程序中的日期范围子集xts索引

MCMC和零事件二元逻辑回归

如何按排序顺序打印一个框架中所有精确的唯一值?

gt()从gt为相同内容的单元格 colored颜色 不同?

使用tidy—select创建一个新的带有mutate的摘要变量

错误:非常长的R行中出现意外符号

R s iml包如何处理语法上无效的因子级别?'

R-更新面内部的栅格值

使用R闪光显示所有数据点作为默认设置

如何读取CSV的特定列时,给定标题作为向量

SHINY:使用JS函数应用的CSS样式显示HTML表格

使用`Watch()`和`renderUI()`时,不再满足仍出现在SHILINY AFTER条件中的条件输入

基于R中的间隔扩展数据集行

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?

在不对R中的变量分组的情况下取两行的平均值

是否有可能从边界中找到一个点值?

构建一个6/49彩票模拟系统

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹

为什么将负值向量提升到分数次方会得到NaN

R中从因数到数字的转换