我有df,代表用户随时间的浏览行为。因此,该df包含一个不稳定的UserId,并且每行都有一个时间戳,代表对某个网站的访问。每个网站都有唯一的网站ID和不合法的网站类别,例如c(“ electronics”,“ clothes”,....)。 现在,我想按行统计用户到该行(包括该行)访问的每个类别有多少个唯一网站。我将此变量称为“宽度”,因为它表示用户浏览互联网的范围。
到目前为止,我仅设法生成一个哑代码,该哑代码创建每个类别中filterung每个类别访问的唯一网站的总数,然后由用户获取唯一向量的长度,然后进行左连接。 因此,随着时间的推移,我确实会丢失有关开发的信息。
非常感谢!
total_breadth <- df %>% filter(category=="electronics") %>%
group_by(user_id) %>%
mutate(breadth=length(unique(website_id)))
#Structure of the df I want to achieve:
user_id time website_id category breadth
1 1 70 "electronics" 1
1 2 93 "clothing" 1
1 3 34 "electronics" 2
1 4 93 "clothing" 1
1 5 26 "electronics" 3
1 6 70 "electronics" 3
#Structure of the df I produce:
user_id time website_id category breadth
1 1 70 "electronics" 3
1 2 93 "clothing" 1
1 3 34 "electronics" 3
1 4 93 "clothing" 1
1 5 26 "electronics" 3
1 6 70 "electronics" 3
答案 0 :(得分:0)
这似乎是拆分,应用和合并的情况。 创建一个1和0的二进制矩阵,其尺寸为:
每一行代表时间戳,每一列代表各自的网站类别。因此,当且仅当用户已在相应时间戳上访问该网站类别的网站时,该单元格才等于1。否则它将为0。
获取此矩阵各个列的累加总和,然后创建一个最后一列,该列仅使用相应时间戳上已访问网站类别的值。
尽管这似乎不是一个很好的解决方案,但希望这可以暂时解决您的问题。