gpt4 book ai didi

r - 与数据框中最接近的非 NA 值的距离

转载 作者:行者123 更新时间:2023-12-02 08:06:00 25 4
gpt4 key购买 nike

我有以下数据框 df,我想为每一行添加一个距离最近的非 NA 值的列。

df <- data.frame(x = 1:20)
df[c(1, 3, 4, 5, 11, 14, 15, 16), "x"] <- NA

换句话说,我正在寻找以下值:

df$distance <- c(1, 0, 1, 2, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 2, 1, 0, 0, 0, 0)

我怎样才能自动执行此操作?

最佳答案

x 成为包含 NA 的向量,你的问题是

a <- which(!is.na(x))
b <- which(is.na(x))

为每个 b[i] 找到 min(abs(a - b[i]))

使用 R 代码高效不容易完成这类任务。用编译后的代码编写循环通常是更好的选择;除非某些包中的某些功能已经为我们完成了这项工作。

以下是一些幼稚但直接的解决方案。

如果x不太长,我们可以使用outer:

distance <- numeric(length(x))
distance[is.na(x)] <- apply(abs(outer(a, b, "-")), 2L, min)

如果它很长并且 outer 的内存使用成为问题,我们可能会这样做

distance <- numeric(length(x))
distance[is.na(x)] <- sapply(b, function (bi) min(abs(bi - a)))

注意,就算法而言,没有一种方法是真正有效的。

关于r - 与数据框中最接近的非 NA 值的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51465189/

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