gpt4 book ai didi

r - 使用行中两侧的平均值估算 na

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

当我可视化我的数据时,它有一系列连续的周期性。但是 Randomforest imputing 和 PCA imputing 会产生离群值。

主要问题:

所以我想在行的两边取平均值。当第n列的NA值出现时,n-1列和n+1列的平均值估算对应行。

子问题

  1. 但第一列和最后一列没有n-1n+1,因此我将取n+1 或n-1。 (不用担心,行的偏差很小。)

  2. 它在行中连续出现一个值。它还需要 n-1n+1

例子:

tr <- structure(list(A_1 = c(NA,2,3,4,5), A_2 =c(4,5,6,NA,8), A_3 = c(7,9,NA,10,11), 
A_4 = c(10,12,NA,13,NA), A_5 =c(12,NA,14,15,16), A_6 = c(13,15,15,16,17)),
row.names = c(NA, -5L),class = "data.frame")
> tr
A_1 A_2 A_3 A_4 A_5 A_6
1 NA 4 7 10 12 13
2 2 5 9 12 NA 15
3 3 6 NA NA 14 15
4 4 NA 10 13 15 16
5 5 8 11 NA 16 17

期望的输出

> tr
A_1 A_2 A_3 A_4 A_5 A_6
1 4 4 7 10 12 13
2 2 5 9 12 13.5 15
3 3 6 6 14 14 15
4 4 7 10 13 15 16
5 5 8 11 13.5 16 17

最佳答案

通过 dplyr 的一种方法是转换为长格式,取值列的 lag()lead(),计算该行表示,替换 NA 并转换回宽。即

library(dplyr)
library(tidyr)

tr %>%
pivot_longer(everything()) %>%
mutate(n1 = lag(value), n2 = lead(value)) %>%
mutate(res = rowMeans(select(., c(n1, n2)), na.rm = TRUE),
value = replace(value, is.na(value), res[is.na(value)])) %>%
select(name, value) %>%
pivot_wider(names_from = name, values_from = value) %>%
unnest()

这给出了,

    A_1   A_2   A_3   A_4   A_5   A_6
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 4 4 7 10 12 13
2 2 5 9 12 13.5 15
3 3 6 6 14 14 15
4 4 7 10 13 15 16
5 5 8 11 13.5 16 17

关于r - 使用行中两侧的平均值估算 na,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62571173/

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