我正在尝试使用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上这个未解决问题。 我要说,在那个问题解决之前,这个问题不会有一个适当的解决方案。其他所有方法都只是权宜之计。所以,如果有人成功地提交了解决该问题的PR并在此处发布了它,我将很乐意将其标记为解决方案。
fill
(目前似乎不支持分组),那么这里有两个重复的问题:这里和这里。 - aosmithddply()
和fill()
制作了一个解决方法,但是我想这个问题存在的事实意味着一个适当的解决方案只能作为该问题的解决办法。 - doicomehereoften1zoo
的解决方法,请参见这里Wojciech的答案。 - Gregor Thomas