2017-06-12 77 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()。乾杯! –