我有视频数据,我正在尝试制作一个新表格,总结视频中迄今为止唯一用户数量的信息。第一个表是我所拥有的,第二个表是我正在使用 R 寻找的表。我尝试按视频和分钟进行分组,但这只为我提供了那一分钟的唯一用户。
用户 | 视频 | 分钟 |
---|---|---|
a | V1 | 1 |
b | V1 | 1 |
b | V1 | 1 |
c | V1 | 1 |
d | V1 | 2 |
c | V1 | 2 |
e | V1 | 2 |
a | V2 | 1 |
b | V2 | 2 |
c | V2 | 2 |
视频 | 分钟 | 独特用户 |
---|---|---|
V1 | 1 | 3 |
V1 | 2 | 5 |
V2 | 1 | 1 |
V2 | 2 | 3 |
library(dplyr)
df |>
summarize(Unique_users = n_distinct(User), .by = c(Video, Minute))
结果(尽管与问题不同,但数据看起来正确)
Video Minute Unique_users
1 V1 1 3
2 V1 2 3
3 V2 1 1
4 V2 2 2
我认为您正在寻找的是不同用户的累积计数,因此在
Minute=2
中,您想要计算Minute
1和2中的所有用户。
library(dplyr)
summarize(quux, .by = c("Video", "Minute"), Users = list(User)) |>
mutate(
.by = "Video",
UniqueUsers = sapply(1:n(), function(i) n_distinct(unlist(Users[1:i])))
)
# Video Minute Users UniqueUsers
# 1 V1 1 a, b, b, c 3
# 2 V1 2 d, c, e 5
# 3 V2 1 a 1
# 4 V2 2 b, c 3
数据
quux <- structure(list(User = c("a", "b", "b", "c", "d", "c", "e", "a", "b", "c"), Video = c("V1", "V1", "V1", "V1", "V1", "V1", "V1", "V2", "V2", "V2"), Minute = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L)), class = "data.frame", row.names = c(NA, -10L))