R逻辑,用于替换1之前出现的每个零

R逻辑,用于替换1之前出现的每个零,r,dataframe,R,Dataframe,我试图构建一个迭代逻辑来实现某些目标,但不知何故,我未能做到这一点: 我有以下数据 Identifier A B C D E F G H I --------- --- -- -- -- -- -- -- -- -- 1 0 0 0 0 0 0 1 0 0 2 0 0 1 0 1 0 0 1 1 3 0 0

我试图构建一个迭代逻辑来实现某些目标,但不知何故,我未能做到这一点:

我有以下数据

Identifier   A   B   C   D   E   F   G   H   I
---------  ---  --  --  --  --  --  --  --  --
1           0    0   0   0   0   0   1   0   0
2           0    0   1   0   1   0   0   1   1
3           0    0   0   0   0   0   1   1   1
我想用每行中的“N”替换第一个1之前出现的所有零,并保持0和1的其余部分不变

这是期望的输出

Identifier   A   B   C   D   E   F   G   H   I
---------  ---  --  --  --  --  --  --  --  --
1           N    N   N   N   N   N   1   0   0
2           N    N   1   0   1   0   0   1   1
3           N    N   N   N   N   N   1   1   1
我正在尝试这个代码,但它没有给我想要的结果

for (i in 1:nrow(test1)) {
  for (j in 2:9){
    if(test1[i,j]==0){
      k <- i
    }
    for(l in 1:k){
      test1[l,j]=3
    }
  }
}
for(i in 1:nrow(test1)){
对于(2:9中的j){
if(test1[i,j]==0){

k我们可以使用
apply

df1[-1] <- t(apply(df1[-1], 1, function(x) replace(x, cumsum(x == 1) ==0, "N")))
数据
df1由于您没有提到您的数据格式,我将提供矩阵的答案:

您可以像这样使用
apply
功能:

m <- matrix(c(0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1), 3, 9, byrow = T)

myfun <- function(x) {
  idx = min(which(x == 1))-1 
  x[1:idx] <- "N"
  return(x)
}

t(apply(m, 1, myfun))

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] "N"  "N"  "N"  "N"  "N"  "N"  "1"  "0"  "0" 
[2,] "N"  "N"  "1"  "0"  "1"  "0"  "0"  "1"  "1" 
[3,] "N"  "N"  "N"  "N"  "N"  "N"  "1"  "1"  "1" 
m
df1 <- structure(list(Identfier = 1:3, A = c(0L, 0L, 0L), B = c(0L, 
0L, 0L), C = c(0L, 1L, 0L), D = c(0L, 0L, 0L), E = c(0L, 1L, 
0L), F = c(0L, 0L, 0L), G = c(1L, 0L, 1L), H = c(0L, 1L, 1L), 
    I = c(0L, 1L, 1L)), class = "data.frame", row.names = c(NA, 
-3L))
m <- matrix(c(0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,0,0,1,1,1), 3, 9, byrow = T)

myfun <- function(x) {
  idx = min(which(x == 1))-1 
  x[1:idx] <- "N"
  return(x)
}

t(apply(m, 1, myfun))

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] "N"  "N"  "N"  "N"  "N"  "N"  "1"  "0"  "0" 
[2,] "N"  "N"  "1"  "0"  "1"  "0"  "0"  "1"  "1" 
[3,] "N"  "N"  "N"  "N"  "N"  "N"  "1"  "1"  "1"