r - 如何让 R 在读取 CSV 时插入 '0' 来代替缺失值?

标签 r csv

我们有一个以下格式的多列 CSV 文件:

id1,id2,id3,id4
1,2,3,4
,,3,4,6
2,,3,4

逐列读取 CSV 时,这些缺失值将被假定为“0”。以下是我们目前拥有的脚本:

data <- read.csv("data.csv")

dfList <- lapply(seq_along(data), function(i) {
    seasonal_per <- msts(data[, i], seasonal.periods=c(24,168))
    best_model <- tbats(seasonal_per)
    fcst <- forecast.tbats(best_model, h=24, level=90)
    dfForec <- print(fcst)
    result <- cbind(0:23, dfForec[, 1])
    result$id <- names(df)[i]

    return(result[c("id", "V1", "V2")])
})

finaldf <- do.call(rbind, dfList)
write.csv(finaldf, file = "out.csv", row.names = FALSE)

当 CSV 缺少值时,此脚本会中断,并给出错误 Error in tau + 1 + adj.beta + object$p : 二元运算符的非数字参数。我们如何告诉 R 在遇到缺失值时假设为“0”?

我尝试了以下方法:

library("forecast")
D <- read.csv("data.csv",na.strings=".")
D[is.na(D)] <- 0

dfList <- lapply(seq_along(data), function(i) {
  seasonal_per <- msts(data[, i], seasonal.periods=c(24,168))
  best_model <- tbats(seasonal_per)
  fcst <- forecast.tbats(best_model, h=24, level=90)
  dfForec <- print(fcst)
  result <- cbind(0:23, dfForec[, 1])
  result$id <- names(df)[i]

  return(result[c("id", "V1", "V2")])
})

finaldf <- do.call(rbind, dfList)
write.csv(finaldf, file = "out.csv", row.names = FALSE)

但它给出了以下错误:

数据[,i]中的错误:“closure”类型的对象不可子集化

最佳答案

如果您确定任何 NA 值应为 0,并且这是唯一的问题,那么

data <- read.csv("data.csv")
data[is.na(data)] <- 0

关于r - 如何让 R 在读取 CSV 时插入 '0' 来代替缺失值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39261597/

相关文章:

r - 是否可以就地(破坏性地)修改data.frame?

javascript - 读取 Json 对象数组并创建 csv 文件时,第一列是从第二条记录开始的

c++ - 为什么这个 write() 操作只写一行

mysql - 将 Access 日期时间类型转换为 mysql 类型

c++ - 将元素数量不断变化的 map 导出为 CSV

r - 无法将 R 数据帧转换为 Spark DataFrame

r - 使用 r "tables"包的嵌套表、列内子组总计、频率和百分比

r - 按组计算级别

r - 如何将 R 数据集中的多列合并为一列?

postgresql - Postgres 中未终止的 CSV 引用字段