我有一个data.table,其中包含不同数据类型的列。我的目标是仅选择数字列,并将这些列中的NA值替换为0。
我知道用零替换na值是这样的:
DT[is.na(DT)] <- 0
为了只选择数字列,我找到了这种解决方案,它可以很好地工作:
DT[, as.numeric(which(sapply(DT,is.numeric))), with = FALSE]
我可以通过分配来实现我想要的
DT2 <- DT[, as.numeric(which(sapply(DT,is.numeric))), with = FALSE]
然后执行:
DT2[is.na(DT2)] <- 0
但是,我当然希望通过引用修改我的原始DT。但是,具有以下内容:
DT[, as.numeric(which(sapply(DT,is.numeric))), with = FALSE]
[is.na(DT[, as.numeric(which(sapply(DT,is.numeric))), with = FALSE])]<- 0
我懂了
我想念什么?
任何帮助深表感谢!!
最佳答案
我们可以使用set
for(j in seq_along(DT)){
set(DT, i = which(is.na(DT[[j]]) & is.numeric(DT[[j]])), j = j, value = 0)
}
或为数字列创建索引,循环遍历,然后将NA值
set
设置为0ind <- which(sapply(DT, is.numeric))
for(j in ind){
set(DT, i = which(is.na(DT[[j]])), j = j, value = 0)
}
数据
set.seed(24)
DT <- data.table(v1= c(NA, 1:4), v2 = c(NA, LETTERS[1:4]), v3=c(rnorm(4), NA))
关于仅在data.table的数字列中将NA替换为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37391573/