如何根据特定字符的位置连续更改值?
我想按行将行之前S之前的所有NA值替换为0。在此特定字符S之后,必须保留该行上的NA。
S是按行结束数据的标记。
在S之前:NA应该是值(实际上是零值!!)。
在S之后:NA仍然为NA,根本没有值。
此处dataframe.txt提供了数据帧示例
我已经尝试过此循环
for (i in 1:length(df)) {
x <- pos = 's' ; y <- pos = i if (y < x) { if (y == "NA"){ replace(y,0) } }
}
也许可以使用which
函数...
感谢您对此的想法! 亚历克斯,
答案 0 :(得分:0)
此代码会将向量中“ S”之前的所有NA替换为0:
initial_row <- c(1,2,4,NA,4,NA,2,"S",NA,NA,NA)
result_row <- initial_row
result_row[is.na(result_row[1:which(result_row == "S")[1]])] <- 0
说明:首先,我们将初始行复制到将要进行处理的结果行中。然后,我们在结果行中选择位置1与“ S”的位置之间的NA。这些值将替换为零。
如果您坚持使用循环来执行此操作(运行速度会变慢),则可以执行以下操作:
for(i in 1:length(result_row)){
if(result_row[i] == "S"){
break
}
if(is.na(result_row[i])){
result_row[i] <- 0
}
}
编辑:如果向量中有字符"NA"
而不是NA
(R识别为丢失的元素),则此代码需要进行如下修改:
result_row[(result_row[1:which(result_row == "S")[1]]) == "NA"] <- 0
或
for(i in 1:length(result_row)){
if(result_row[i] == "S"){
break
}
if(result_row[i] == "NA"){
result_row[i] <- 0
}
}