使用dplyr按组将NA替换为上一个或下一个值

我有一个数据框,按日期的降序排列。


ps1 = data.frame(userID = c(21,21,21,22,22,22,23,23,23), 

             color = c(NA,'blue','red','blue',NA,NA,'red',NA,'gold'), 

             age = c('3yrs','2yrs',NA,NA,'3yrs',NA,NA,'4yrs',NA), 

             gender = c('F',NA,'M',NA,NA,'F','F',NA,'F') 

)

我希望用先前的值来插值(替换)NA值,并按userID分组。如果userID的第一行具有NA,则替换该用户ID组的下一组值。


我正在尝试使用dplyr和zoo包之类的东西...但是它不起作用


cleanedFUG <- filteredUserGroup %>%

 group_by(UserID) %>%

 mutate(Age1 = na.locf(Age), 

     Color1 = na.locf(Color), 

     Gender1 = na.locf(Gender) ) 

我需要这样的结果df:


                      userID color  age gender

                1     21  blue 3yrs      F

                2     21  blue 2yrs      F

                3     21   red 2yrs      M

                4     22  blue 3yrs      F

                5     22  blue 3yrs      F

                6     22  blue 3yrs      F

                7     23   red 4yrs      F

                8     23   red 4yrs      F

                9     23  gold 4yrs      F


陪伴而非守候
浏览 1002回答 3
3回答

墨色风雨

require(tidyverse) #fill is part of tidyrps1 %>%&nbsp;&nbsp; group_by(userID) %>%&nbsp;&nbsp; fill(color, age, gender) %>% #default direction down&nbsp; fill(color, age, gender, .direction = "up")这给你:Source: local data frame [9 x 4]Groups: userID [3]&nbsp; userID&nbsp; color&nbsp; &nbsp; age gender&nbsp; &nbsp;<dbl> <fctr> <fctr> <fctr>1&nbsp; &nbsp; &nbsp;21&nbsp; &nbsp;blue&nbsp; &nbsp;3yrs&nbsp; &nbsp; &nbsp; F2&nbsp; &nbsp; &nbsp;21&nbsp; &nbsp;blue&nbsp; &nbsp;2yrs&nbsp; &nbsp; &nbsp; F3&nbsp; &nbsp; &nbsp;21&nbsp; &nbsp; red&nbsp; &nbsp;2yrs&nbsp; &nbsp; &nbsp; M4&nbsp; &nbsp; &nbsp;22&nbsp; &nbsp;blue&nbsp; &nbsp;3yrs&nbsp; &nbsp; &nbsp; F5&nbsp; &nbsp; &nbsp;22&nbsp; &nbsp;blue&nbsp; &nbsp;3yrs&nbsp; &nbsp; &nbsp; F6&nbsp; &nbsp; &nbsp;22&nbsp; &nbsp;blue&nbsp; &nbsp;3yrs&nbsp; &nbsp; &nbsp; F7&nbsp; &nbsp; &nbsp;23&nbsp; &nbsp; red&nbsp; &nbsp;4yrs&nbsp; &nbsp; &nbsp; F8&nbsp; &nbsp; &nbsp;23&nbsp; &nbsp; red&nbsp; &nbsp;4yrs&nbsp; &nbsp; &nbsp; F9&nbsp; &nbsp; &nbsp;23&nbsp; &nbsp;gold&nbsp; &nbsp;4yrs&nbsp; &nbsp; &nbsp; F
打开App,查看更多内容
随时随地看视频慕课网APP