我有一个数据框,其中包含网页 ('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
我想知道有多少独特的人看过不同的网页。
例如在以下数据集网页中,111 已被三个人看到(Dept 和 emp ID 的独特组合)。因此,网页 111 已被 Dept 101 和 102 中的 emp_ID 1,2 和 3 看到。同样,网页 222 已被两个不同的人看到。
我的第一次尝试是:
nrow(unique(data[ , c("Dept", "Emp_ID)]))
使用unique
我可以为一个网页做,但有人可以建议我如何为所有网页计算这个
答案 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