gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:36:37 25 4
gpt4 key购买 nike

我正在尝试构建一个迭代逻辑来实现某些目标,但我以某种方式失败了:

我有以下数据

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

我想将每行中第一个 1 之前出现的所有零替换为“N”,并保留其余的 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
}
}
}

有人能帮我吗?

最佳答案

我们可以使用apply

df1[-1] <- t(apply(df1[-1], 1, function(x) replace(x, cumsum(x == 1) ==0, "N")))

或者使用 matrixStats 中的 rowCumsums

library(matrixStats)
df1[-1][rowCumsums(as.matrix(df1[-1])) == 0] <- "N"

df1
# Identfier A B C D E F G H I
#1 1 N N N N N N 1 0 0
#2 2 N N 1 0 1 0 0 1 1
#3 3 N N N N N N 1 1 1

数据

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))

关于用于替换 1 之前出现的每个零的 R 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58562378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com