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"