为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

陪伴而非守候 2019-10-21 10:40:50
我有一个数据框,按日期的降序排列。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
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

require(tidyverse) #fill is part of tidyr


ps1 %>% 

  group_by(userID) %>% 

  fill(color, age, gender) %>% #default direction down

  fill(color, age, gender, .direction = "up")

这给你:


Source: local data frame [9 x 4]

Groups: userID [3]


  userID  color    age gender

   <dbl> <fctr> <fctr> <fctr>

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


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 1001 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信