将缺失值(Na)按组替换为最近的非NA值。

将缺失值(Na)按组替换为最近的非NA值。

我想用dplyr解决以下问题。较佳的窗口功能之一。我有一个数据框架,里面有房子和买价。以下是一个例子:


houseID      year    price 

1            1995    NA

1            1996    100

1            1997    NA

1            1998    120

1            1999    NA

2            1995    NA

2            1996    NA

2            1997    NA

2            1998    30

2            1999    NA

3            1995    NA

3            1996    44

3            1997    NA

3            1998    NA

3            1999    NA

我想做一个这样的数据框架:


houseID      year    price 

1            1995    NA

1            1996    100

1            1997    100

1            1998    120

1            1999    120

2            1995    NA

2            1996    NA

2            1997    NA

2            1998    30

2            1999    30

3            1995    NA

3            1996    44

3            1997    44

3            1998    44

3            1999    44

以下是一些格式正确的数据:


# Number of houses

N = 15


# Data frame

df = data.frame(houseID = rep(1:N,each=10), year=1995:2004, price =ifelse(runif(10*N)>0.15, NA,exp(rnorm(10*N))))

有办法吗?


慕沐林林
浏览 701回答 3
3回答

慕婉清6462132

tidyr::fill现在让这件愚蠢的事情变得简单起来:library(dplyr)library(tidyr)# or library(tidyverse)df %>% group_by(houseID) %>% fill(price)# Source: local data frame [15 x 3]# Groups: houseID [3]# #    houseID  year price#      (int) (int) (int)# 1        1  1995    NA# 2        1  1996   100# 3        1  1997   100# 4        1  1998   120# 5        1  1999   120# 6        2  1995    NA# 7        2  1996    NA# 8        2  1997    NA# 9        2  1998    30# 10       2  1999    30# 11       3  1995    NA# 12       3  1996    44# 13       3  1997    44# 14       3  1998    44# 15       3  1999    44
打开App,查看更多内容
随时随地看视频慕课网APP