【发布时间】:2016-04-03 17:03:15
【问题描述】:
我正在尝试使用dplyr 和tidyr 对一些格式不正确的数据执行最后一次观察结转操作。它没有像我预期的那样工作。
library(dplyr)
library(tidyr)
df <- data.frame(id=c(1,1,2,2,3,3),
email=c('bob@email.com', NA, 'joe@email.com', NA, NA, NA))
df2 <- df %>% group_by(id) %>% fill(email)
这会导致:
Source: local data frame [6 x 2]
Groups: id [3]
id email
(dbl) (fctr)
1 1 bob@email.com
2 1 bob@email.com
3 2 joe@email.com
4 2 joe@email.com
5 3 joe@email.com
6 3 joe@email.com
我希望它是:
Source: local data frame [6 x 2]
Groups: id [3]
id email
(dbl) (fctr)
1 1 bob@email.com
2 1 bob@email.com
3 2 joe@email.com
4 2 joe@email.com
5 3 NA
6 3 NA
我希望它是后者的原因是因为group_by 的文档说:“group_by 函数采用现有的 tbl 并将其转换为分组 tbl,其中“按组”执行操作。”本例中的组由id变量确定,下面的操作为fill(email)。但是,很明显它没有这样做。
在任何人问之前,如果字段都是character 而不是numeric 或factor,这没有区别。
更新 @aosmith 在 Github 上指出了 this open issue。我要说的是,在这个问题得到解决之前,不会有适当的解决方案。其他一切都只是一种解决方法。因此,如果有人成功地 PR 解决了该问题并将其发布在此处,我很乐意将其标记为解决方案。
【问题讨论】:
-
在 github 仓库中好像有一个open issue 关于这个
-
感谢 Github 问题链接!我最终确实使用
ddply()和fill()解决了问题,但我想问题存在的事实意味着正确的解决方案只能作为解决该问题的方法。 -
作为不需要
zoo的解决方法,请参阅Wojciech's answer over here。