2017-06-12 73 views
0

我最后一个问题的答案帮助我了解dplyrn()。但我仍然无法适用于我想解决的问题。所以,我在这里发布数据和实际问题。数据如下所示计算多个栏和组在R

finalCalledPartyNumber Call Day   Call Date    Block Answered Call Duration Opty ID Opty Created Date BC ID 
      19183598259 Monday 2016-12-05 12:26:46 Block 2(12:30 pm)    1  5 1234    <NA> <NA> 
      17135796188 Monday 2016-12-05 12:18:24 Block 2(12:30 pm)    1  16 <NA>    <NA> 3456 
      19183598259 Monday 2016-12-05 15:43:33 Block 4(5:30 pm)    1  10 <NA>    <NA> 4567 
      17135796188 Tuesday 2016-12-06 11:53:50 Block 2(12:30 pm)    1  85 <NA>    <NA> 5566 
      19014741000 Tuesday 2016-12-06 12:00:11 Block 2(12:30 pm)    1  42 6789    <NA> <NA> 
      19014741000 Tuesday 2016-12-06 10:43:20 Block 2(12:30 pm)    1  58 2345    <NA> <NA> 
    BC Created Date 
      <NA> 
      <NA> 
      <NA> 
      <NA> 
      <NA> 
      <NA> 

对于每个finalCalledPartyNumber,我要计算次,每次finallCalledPartyNumber叫的Opty IDBC ID数量,数量。该数据集是巨大的,并且<NA>只是意味着没有Opty IDBC ID被创建。

输出:

finalCalledPartyNumber n_opty n_BC n_calls 
      19183598259   1  1 2 
      17135796188   0  2 2 
      19014741000   2  0 2 

我感谢你的帮助。谢谢。

+0

如果你没有你想要排除的NULL,'count'并不需要一个参数:你可以用'count(1)'替换count([finalCalledPartyNumber])'。所以'n()'在这里应该很好,如果你有空值,就把它们过滤掉。 – HubertL

+0

[请重现例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Masoud

回答

1

这是实现你要找的人使用dplyr结果的另一种方式,但它不使用N( )

df %>% group_by(finalCalledPartyNumber) %>% 
      summarise(n_opty = sum(!is.na(Opty.Id)), 
        n_BC = sum(!is.na(BC.ID)), 
        n_calls = sum(!is.na(Call))) 

输出:

# A tibble: 3 x 4 
    finalCalledPartyNumber n_opty n_BC n_calls 
        <dbl> <int> <int> <int> 
    1   17135796188  0  2  2 
    2   19014741000  2  0  2 
    3   19183598259  1  1  2 
+0

谢谢@Megha John。这是一个巧妙的把戏。 –

0

n()统计每组中的行数。如果您不想计算特定列的重复项,则可以使用n_distinct()并传递列的名称。您还可以使用count()作为group_by() + summarize(count = n())tally()的简写,作为summarize部分的简写。

这里有不同的动词和功能的演示:


library(dplyr) 

mtcars %>% 
    count(cyl) 
#> # A tibble: 3 x 2 
#>  cyl  n 
#> <dbl> <int> 
#> 1  4 11 
#> 2  6  7 
#> 3  8 14 

mtcars %>% 
    group_by(cyl) %>% 
    summarize(n = n()) 
#> # A tibble: 3 x 2 
#>  cyl  n 
#> <dbl> <int> 
#> 1  4 11 
#> 2  6  7 
#> 3  8 14 


mtcars %>% 
    group_by(cyl) %>% 
    tally() 
#> # A tibble: 3 x 2 
#>  cyl  n 
#> <dbl> <int> 
#> 1  4 11 
#> 2  6  7 
#> 3  8 14 

mtcars %>% 
    group_by(cyl) %>% 
    summarize(n_distinct = n_distinct(mpg)) 
#> # A tibble: 3 x 2 
#>  cyl n_distinct 
#> <dbl>  <int> 
#> 1  4   9 
#> 2  6   6 
#> 3  8   12 

mtcars %>% 
    group_by(cyl) %>% 
    distinct(mpg) %>% 
    tally() 
#> # A tibble: 3 x 2 
#>  cyl  n 
#> <dbl> <int> 
#> 1  4  9 
#> 2  6  6 
#> 3  8 12 
+0

谢谢大家的解释。我现在从解释中得到了n()。干杯! –