首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用上一值和下一值的平均值交换NA

用上一值和下一值的平均值交换NA
EN

Stack Overflow用户
提问于 2022-04-27 17:41:08
回答 2查看 58关注 0票数 1

我为特定的一列寻找如何用DataFrame中前一个值和下一个值的平均值交换NAs的答案。但是我没有找到一个答案,它说明了如何在基数R上做这件事,附加的是,NAs可以在彼此旁边。

DataFrame:

代码语言:javascript
复制
     name    number
1    John    56
2    Garry   NA
3    Carl    70
4    Doris   96
5    Wendy   NA
6    Louis   NA
7    Becky   40

被淘汰的产出:

代码语言:javascript
复制
     name    number
1    John    56
2    Garry   63
3    Carl    70
4    Doris   96
5    Wendy   68
6    Louis   68
7    Becky   40
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-27 17:59:57

在R基地,你可以:

代码语言:javascript
复制
idx <- is.na(df$number)
df$number[idx] <- 0
b <- with(rle(df$number), rep(stats::filter(values, c(1,0,1)/2), lengths))
df$number[idx] <- b[idx]

df
   name number
1  John     56
2 Garry     63
3  Carl     70
4 Doris     96
5 Wendy     68
6 Louis     68
7 Becky     40
票数 -1
EN

Stack Overflow用户

发布于 2022-04-27 18:33:35

代码语言:javascript
复制
within(df1, number.fill <- 
                 rowMeans(cbind(ave(number, cumsum(!is.na(number)), 
                                    FUN=function(x) x[1]),
                                rev(ave(rev(number), cumsum(!is.na(rev(number))),
                                        FUN=function(x) x[1])))))
#>    name number number.fill
#> 1  John     56          56
#> 2 Garry     NA          63
#> 3  Carl     70          70
#> 4 Doris     96          96
#> 5 Wendy     NA          68
#> 6 Louis     NA          68
#> 7 Becky     40          40

数据:

代码语言:javascript
复制
read.table(text = "name    number
                   John    56
                   Garry   NA
                   Carl    70
                   Doris   96
                   Wendy   NA
                   Louis   NA
                   Becky   40", 
            header = T, stringsAsFactors = F) -> df1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72033143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档