R语言 查找特定值的第一个行并将该行中的所有后续值替换为NA时出现问题

dced5bon  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(185)

我之前询问了列式替换,但在用NA替换行式值时得到了错误。我在R中有下面的'test' Dataframe ,其中有几行二进制值(0,1)。我想在每一行中找到1的第一个发生率,并将所有后续值替换为NA。

> [,1] [,2] [,3] [,4] [,5] [,6] [,7]   
> [1,] 0 0 0 0 0 0 0   
> [2,] 1 1 1 0 0 1 1   
> [3,] 0 1 0 0 0 0 0

测试应变为:

> [,1] [,2] [,3] [,4] [,5] [,6] [,7]  
> [1,] 0 0 0 0 0 0 0  
> [2,] 1 NA NA NA NA NA NA  
> [3,] 0 1 NA NA NA NA NA

在其他文章中,我尝试包含rowwise()和mutate(),我包含了c_across(),但得到了以下代码的错误:

> test %>% rowwise() %>%
>     mutate(c_across(everything(), \(x) replace(x, cummax(x) & cummax(lag(x, default = 0)), NA)))

再次感谢你的帮助。

xvw2m8pv

xvw2m8pv1#

首先需要一个要处理的对象:

M <- matrix( scan(text="0 0 0 0 0 0 0   
 1 1 1 0 0 1 1   
 0 1 0 0 0 0 0"), 3,7, byrow=TRUE)

需要转置否则看起来像是自文档化代码的代码,因为apply将行应用的值作为列返回。

t(apply(M, 1,    # work on rows of M
     function(r){ if( any(r==1)){   # skip lines with all 0
                   r[ (which(r==1)[1]+1):7 ]  <- NA} #modify others
                   r}))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    0    0    0    0    0    0    0
[2,]    1   NA   NA   NA   NA   NA   NA
[3,]    0    1   NA   NA   NA   NA   NA

相关问题