gpt4 book ai didi

r - 使用 na.approx 在数据框中插入 NA 值

转载 作者:行者123 更新时间:2023-12-03 11:55:32 25 4
gpt4 key购买 nike

我正在尝试删除 NA s 从我的数据框中通过 na.approx() 插值但不能删除所有 NA s。

我的数据框是一个 4096x4096,其中 270.15 作为无效值的标志。我需要所有点的数据都是连续的,以提供气象模型。昨天我询问并获得了关于如何替换基于另一个数据帧的数据帧中的值的答案。但在那之后我来到na.approx()然后决定用 NA 替换 270.15 的值并尝试 na.approx()插入数据。但问题是为什么na.approx()不会替换所有 NA。

这就是我正在做的:

  • 用hdf5load读取原始hdf文件
  • 子集数据帧 (4094x4096)
  • 用 NA 替换标志值
    > sst4[sst4 == 270.15 ] = NA
  • 检查第一列(或任何其他列)
    > summary(sst4[,1])

    Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
    271.3 276.4 285.9 285.5 292.3 302.8 1345.0
  • 运行 na.approx
    > sst4=na.approx(sst4,na.rm="FALSE")
  • 检查第一列
    > summary(sst4[,1]) 
    Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
    271.3 276.5 286.3 285.9 292.6 302.8 411.0

  • 如您所见,411 NA 尚未删除。为什么?它们是否都对应于前导/结束列值?
    head(sst4[,1])
    [1] NA NA NA NA NA NA
    tail(sst4[,1])
    [1] NA NA NA NA NA NA

    na.approx 是否需要在 NA 之前和之后具有有效值才能进行插值?我需要设置任何其他 na.approx 选项吗?

    非常感谢

    最佳答案

    一个小的,可重复的例子:

    library(zoo)
    set.seed(1)
    m <- matrix(runif(16, 0, 100), nrow = 4)
    missing_values <- sample(16, 7)
    m[missing_values] <- NA
    m
    [,1] [,2] [,3] [,4]
    [1,] 26.55087 20.16819 62.911404 68.70228
    [2,] 37.21239 NA 6.178627 38.41037
    [3,] NA NA NA NA
    [4,] 90.82078 66.07978 NA NA

    na.approx(m)
    [,1] [,2] [,3] [,4]
    [1,] 26.55087 20.16819 62.911404 68.70228
    [2,] 37.21239 35.47206 6.178627 38.41037
    [3,] 64.01658 50.77592 NA NA
    [4,] 90.82078 66.07978 NA NA

    m[4, 4] <- 50
    na.approx(m)
    [,1] [,2] [,3] [,4]
    [1,] 26.55087 20.16819 62.911404 68.70228
    [2,] 37.21239 35.47206 6.178627 38.41037
    [3,] 64.01658 50.77592 NA 44.20519
    [4,] 90.82078 66.07978 NA 50.00000

    是的,看起来您确实需要知道列的开始/结束值,否则插值不起作用。你能猜出你的边界值吗?

    另一个编辑:所以默认情况下,您需要知道列的开始和结束值。但是有可能得到 na.approx总是通过传递 rule = 2 来填空.见菲利克斯的回答。您也可以使用 na.fill根据 Gabor 的评论提供默认值。最后,您可以在两个方向上插入边界条件(见下文)或猜测边界条件。

    编辑:进一步的想法。自 na.approx仅在列中插入,并且您的数据是空间的,也许在行中插入也很有用。然后你可以取平均值。
    na.approx当整列是 NA 时失败,所以我们创建了一个更大的数据集。
    set.seed(1)
    m <- matrix(runif(64, 0, 100), nrow = 8)
    missing_values <- sample(64, 15)
    m[missing_values] <- NA

    运行 na.approx双向。
    by_col <- na.approx(m)
    by_row <- t(na.approx(t(m)))

    找出最好的猜测。
    default <- 50
    best_guess <- ifelse(is.na(by_row),
    ifelse(
    is.na(by_col),
    default, #neither known
    by_col #only by_col known
    ),
    ifelse(
    is.na(by_col),
    by_row, #only by_row known
    (by_row + by_col) / 2 #both known
    )
    )

    关于r - 使用 na.approx 在数据框中插入 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7317607/

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