Han*_*esZ 6 r numeric na data.table
我有一个data.table与不同数据类型的列.我的目标是只选择数字列,并将这些列中的NA值替换为0.我知道用零替换na值如下所示:
DT[is.na(DT)] <- 0
Run Code Online (Sandbox Code Playgroud)
要仅选择数字列,我找到了这个解决方案,它工作正常:
DT[, as.numeric(which(sapply(DT,is.numeric))), with = FALSE]
Run Code Online (Sandbox Code Playgroud)
我可以通过分配实现我想要的
DT2 <- DT[, as.numeric(which(sapply(DT,is.numeric))), with = FALSE]
Run Code Online (Sandbox Code Playgroud)
然后做:
DT2[is.na(DT2)] <- 0
Run Code Online (Sandbox Code Playgroud)
但是我当然希望通过引用修改我原来的DT.但是,以下内容:
DT[, as.numeric(which(sapply(DT,is.numeric))), with = FALSE]
[is.na(DT[, as.numeric(which(sapply(DT,is.numeric))), with = FALSE])]<- 0
Run Code Online (Sandbox Code Playgroud)
我明白了
"
[.data.table([...] i中的错误是无效类型(矩阵)"
我错过了什么?任何帮助深表感谢!!
akr*_*run 11
我们可以用 set
for(j in seq_along(DT)){
set(DT, i = which(is.na(DT[[j]]) & is.numeric(DT[[j]])), j = j, value = 0)
}
Run Code Online (Sandbox Code Playgroud)
或者为数字列创建索引,循环遍历它并将setNA值设置为0
ind <- which(sapply(DT, is.numeric))
for(j in ind){
set(DT, i = which(is.na(DT[[j]])), j = j, value = 0)
}
Run Code Online (Sandbox Code Playgroud)
set.seed(24)
DT <- data.table(v1= c(NA, 1:4), v2 = c(NA, LETTERS[1:4]), v3=c(rnorm(4), NA))
Run Code Online (Sandbox Code Playgroud)