我有一个日期字段(因子类转换为字符串),缺少值,我想用每个缺失值的序列号填充。到目前为止,这是我的代码......
f<- function(x, counter){
if(x == ""){
counter = counter + 1; return (toString(counter))
} else{
return (toString(x))
}
}
sapply(x$DateTime_, f, -9999)
计数器不会递增并返回如下的向量:
[1] "-9998" "-9998" "-9998" "-9998" "-9998" "1/1/1998"
任何帮助让计数器增加的帮助都将受到赞赏。
答案 0 :(得分:2)
这是实现同一目标的另一种方法。它利用逻辑索引和固有的矢量化比较和替换运算符:
dates <- c("", "", "", "", "", "1/1/1998", "")
blanks <- dates == ""
dates[blanks] <- seq(from=-9999, by=1, length.out=sum(blanks))
dates
# [1] "-9999" "-9998" "-9997" "-9996" "-9995" "1/1/1998" "-9994"
答案 1 :(得分:1)
你的函数将-9999传递给f的每次调用,然后将其递增1.这就是每次返回-9998的原因。
您可能希望在父环境中维护计数器变量,并使用&lt;&lt; - 运算符更新它。像这样的东西可以解决你的例子:
f = function(x) {
if (x == "") {
counter <<- counter + 1
return(toString(counter))
} else {
return(toString(x))
}
}
counter <- -9999
sapply(c("", "", "", "", "", "1/1/1998"), f)