gpt4 book ai didi

在 R 中的 data.table 中用 0 替换所有 NA

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

我有一个 data.table有很多列。我想替换 4 列 NA与 0。

我有一个可行的解决方案:

  claimsMonthly[is.na(claim9month),claim9month := 0
][is.na(claim10month),claim10month := 0
][is.na(claim11month),claim11month := 0
][is.na(claim12month),claim12month := 0]

但是,这是非常重复的,我想通过使用循环来减少这种情况(但不确定这是否是最聪明的想法?):
  for (i in 9:12){
claimsMonthly[is.na(paste0("claim", i, "month")), paste0("claim", i, "month") := 0]
}

当我运行这个循环时,什么也没有发生。我想这是由于 paste0() 的协议(protocol)。返回 "claim12month" ,所以我得到 in.na("claim12month") .结果是 FALSE尽管有 NA在我的数据中。我想这与引号有关吗?

这不是我第一次在使用 paste0() 时遇到问题或使用 data.table 运行循环,所以我一定在这里遗漏了一些重要的东西。

任何想法如何解决这一问题?

最佳答案

我们可以指定 .SDcols使用列的名称('nm1'),循环遍历 .SD (Data.table 的子集)并将 NA 分配给 0( replace_na 来自 tidyr)

library(data.table)
library(tidyr)
nm1 <- paste0("claim", 9:12, "month")
setDT(claimsMonthly)[, (nm1) := lapply(.SD, replace_na, 0), .SDcols = nm1]

或者正如评论中提到的@jangorecki, nafill来自 data.table会更好
setDT(claimsMonthly)[, (nm1) := lapply(.SD, nafill, fill = 0), .SDcols = nm1]

或与 set 一起使用循环,通过指定 i,根据每列中的 NA 值为感兴趣的列分配 0 (用于行索引)和 j对于列索引/名称
for(j in nm1){
set(claimsMonthly, i = which(is.na(claimsMonthly[[j]])), j =j, value = 0)
}

或与 setnafill
setnafill(claimsMonthly, cols = nm1, fill = 0)

关于在 R 中的 data.table 中用 0 替换所有 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62029452/

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