gpt4 book ai didi

r - 如何将距离归入一个值

转载 作者:行者123 更新时间:2023-12-04 01:06:45 25 4
gpt4 key购买 nike

我想用到最近的非 NA 值的“行距离”填充缺失值。换句话说,我如何将这个示例数据框中的 x 列转换为 y 列?

#    x y
#1 0 0
#2 NA 1
#3 0 0
#4 NA 1
#5 NA 2
#6 NA 1
#7 0 0
#8 NA 1
#9 NA 2
#10 NA 3
#11 NA 2
#12 NA 1
#13 0 0

我似乎找不到 dplyr group_by 和 mutate row_number() 语句的正确组合来完成这个技巧。我研究过的各种插补包是为使用统计数据和其他变量执行插补的更复杂的场景而设计的。
d<-data.frame(x=c(0,NA,0,rep(NA,3),0,rep(NA,5),0),y=c(0,1,0,1,2,1,0,1,2,3,2,1,0))

最佳答案

我们可以用

d$z = sapply(seq_along(d$x), function(z) min(abs(z - which(!is.na(d$x)))))
# x y z
# 1 0 0 0
# 2 NA 1 1
# 3 0 0 0
# 4 NA 1 1
# 5 NA 2 2
# 6 NA 1 1
# 7 0 0 0
# 8 NA 1 1
# 9 NA 2 2
# 10 NA 3 3
# 11 NA 2 2
# 12 NA 1 1
# 13 0 0 0

如果你想在 dplyr 中做到这一点,你可以把 sapply 包裹起来。参加 mutate .
d %>%
mutate(z = sapply(seq_along(x), function(z) min(abs(z - which(!is.na(x))))))

或者,也使用 library(purrr) (感谢@Onyambu):
d %>% mutate(m=map_dbl(1:n(),~min(abs(.x-which(!is.na(x))))))

关于r - 如何将距离归入一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53889119/

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