使用数据帧上的循环将 R 中的 NA 替换为 0

标签 r

我想遍历数据框中的特定列,并使用循环将所有 NA 替换为 0。

extract = read.csv("2013-09 Data extract.csv")
extract$Premium1[is.na(extract$Premium1)] <- 0
extract$Premium1

在数据框 extract 中为 Premium1 提供了所需的结果,但我想遍历所有 27 列 premium,所以我正在尝试的是

extract = read.csv("2013-09 Data extract.csv")

for(i in 1:27) { 
  thispremium <- get(paste("extract$Premium", i, sep="")) 
  thispremium[is.na(thispremium)] <- 0
}

给出

Error in get(paste("extract$Premium", i, sep = "")) : 
  object 'extract$Premium1' not found

知道导致错误的原因吗?

最佳答案

您是否因为其他要求而需要循环?因为没有它也能正常工作:

extract[is.na(extract)] <- 0

如果只想对某些列进行替换,请先选择这些列,执行替换,然后将这些列替换回原始集合:

first5 <- extract[, 1 : 5]
first5[is.na(first5)] <- 0
extract[, 1 : 5] <- first5

更一般地说,在 R 中几乎可以(并且应该)避免循环——尤其是在处理数据帧时)。通常操作会自动矢量化(如上)。如果没有,则可以使用 apply 系列的函数。

关于使用数据帧上的循环将 R 中的 NA 替换为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19383987/

相关文章:

r - 将 sf 对象列表转换为一个 sf

r - 如何生成一个因素以另一个因素为条件的条形图?

r - 需要对使用循环的函数进行向量化(用向量中的值替换 NA 行)

R - 仅按时间子集数据帧

R下载.文件错误无法打开URl

r - 如何根据数据框中的分组来增加数字距离?

r - 以编程方式删除 dplyr 中的 `group_by` 字段

用字符串中的平均值替换范围

r - 如何打印可被7整除的数字

r - 如何从 R 中的 2-D copula 中找到联合累积分布函数?