gpt4 book ai didi

将 NA 替换为 0,仅在 data.table 中的数字列中

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

我有一个包含不同数据类型列的 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

我得到

"Error in [.data.table([...] i is invalid type (matrix)"



我错过了什么?
任何帮助深表感谢!!

最佳答案

我们可以使用 set

for(j in seq_along(DT)){
set(DT, i = which(is.na(DT[[j]]) & is.numeric(DT[[j]])), j = j, value = 0)
}

或者为数字列创建一个索引,遍历它和 set NA 值为 0
ind <-   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))

关于将 NA 替换为 0,仅在 data.table 中的数字列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37391573/

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