按组计算两列中唯一值的数量

时间:2021-03-30 08:05:28

标签: r

我有一个数据框,其中包含网页 ('Webpage')、部门 ('Dept') 和员工 ('Emp_ID') 的 ID:

df <- data.frame(Webpage = c(111, 111, 111, 111, 222, 222), 
                 Dept = c(101, 101, 101, 102, 102, 103), 
                 Emp_ID = c(1, 1, 2, 3, 4, 4)) 

#   Webpage Dept Emp_ID
# 1     111  101      1
# 2     111  101      1
# 3     111  101      2
# 4     111  102      3
# 5     222  102      4
# 6     222  103      4

我想知道有多少独特的人看过不同的网页。

enter image description here

例如在以下数据集网页中,111 已被三个人看到(Dept 和 emp ID 的独特组合)。因此,网页 111 已被 Dept 101 和 102 中的 emp_ID 1,2 和 3 看到。同样,网页 222 已被两个不同的人看到。

我的第一次尝试是:

nrow(unique(data[ , c("Dept", "Emp_ID)]))  

使用unique我可以为一个网页做,但有人可以建议我如何为所有网页计算这个

3 个答案:

答案 0 :(得分:2)

对于每个 Webpage 使用 duplicated 计算基于两列的唯一数字。

library(dplyr)

df %>%
  group_by(Webpage) %>%
  summarise(n_viewers = sum(!duplicated(cur_data())))

#  Webpage n_viewers
#    <dbl>     <int>
#1     111         3
#2     222         2

数据

以比图像更容易复制的可复制格式提供数据。

df <- data.frame(Webpage = c(111, 111, 111, 111, 222, 222), 
                 Dept = c(101, 101, 101, 102, 102, 103), 
                 Emp_Id = c(1, 1, 2, 3, 4, 4))

答案 1 :(得分:2)

df <- data.frame(Webpage = c(111, 111, 111, 111, 222, 222), 
                 Dept = c(101, 101, 101, 102, 102, 103), 
                 Emp_Id = c(1, 1, 2, 3, 4, 4))
library(dplyr)

df %>% 
  group_by(Webpage) %>% 
  summarise(n = n_distinct(Dept, Emp_Id))
#> # A tibble: 2 x 2
#>   Webpage     n
#>     <dbl> <int>
#> 1     111     3
#> 2     222     2

library(data.table)
setDT(df)[, list(n = uniqueN(paste0(Dept, Emp_Id))), by = Webpage]
#>    Webpage n
#> 1:     111 3
#> 2:     222 2

reprex package (v1.0.0) 于 2021 年 3 月 30 日创建

答案 2 :(得分:0)

希望aggregate能帮上忙

> aggregate(cbind(n_viewer = Emp_Id) ~ Webpage, unique(df), length)
  Webpage n_viewer
1     111        3
2     222        2