我上一个问题的答案帮助我理解了dplyr
n()
。但我仍然不能适用于我想解决的问题。所以,我在这里发布数据和实际问题。数据如下
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 ID
和BC ID
的数量。数据集很大,而<NA>
只表示没有创建Opty ID
或BC ID
。
输出:
finalCalledPartyNumber n_opty n_BC n_calls
19183598259 1 1 2
17135796188 0 2 2
19014741000 2 0 2
感谢您的帮助。谢谢。
答案 0 :(得分: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
答案 1 :(得分: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