使用group_by完成列并完成

时间:2017-04-19 16:51:00

标签: r dplyr tidyr

使用dplyr group_by函数时遇到了一些问题。 这样做之后:

datasetALL %>% group_by(YEAR,Region) %>% summarise(count_number = n()) 

结果如下:

YEAR Region count_number
<int>  <int>        <int>
1   1946      1            2
2   1946      2            3
3   1946      3            1
4   1946      5            1
5   1947      3            1
6   1947      4            1

我想要像:

YEAR Region count_number
<int>  <int>        <int>
1   1946      1            2
2   1946      2            3
3   1946      3            1
4   1946      5            1
5   1946      4            0 #order is no important
6   1947      1            0
7   1947      2            0
8   1947      3            1
9   1947      4            1
10  1947      5            0

我尝试使用tidyr包中的complete(),但它没有成功......

2 个答案:

答案 0 :(得分:7)

使用tidyr包中的complete应该有效。您可以找到有关它的文档here

可能发生的是你没有删除分组。然后,完成尝试在每个组中添加YEARRegion的每个组合。但所有这些组合已经在分组中。因此,首先删除分组,然后完成。

datasetALL %>% 
    group_by(YEAR,Region) %>% 
    summarise(count_number = n()) %>%
    ungroup() %>%
    complete(Year, Region, fill = list(count_number = 1))

答案 1 :(得分:0)

已经提到过,但是您可以通过使用tidyr和其中的参数nesting来整体解决此问题:

complete(df, YEAR, nesting(Region), fill = list(count_number = 0))

    YEAR Region count_number
   <int>  <int>        <dbl>
 1  1946      1            2
 2  1946      2            3
 3  1946      3            1
 4  1946      4            0
 5  1946      5            1
 6  1947      1            0
 7  1947      2            0
 8  1947      3            1
 9  1947      4            1
10  1947      5            0