如何根据字符变量中的唯一值获取累计和?

时间:2019-04-21 22:12:57

标签: r data-manipulation

我有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

1 个答案:

答案 0 :(得分:0)

这似乎是拆分,应用和合并的情况。 创建一个1和0的二进制矩阵,其尺寸为:

  • 不。行数=原始数据中的行数
  • 列数=唯一网站类别数

每一行代表时间戳,每一列代表各自的网站类别。因此,当且仅当用户已在相应时间戳上访问该网站类别的网站时,该单元格才等于1。否则它将为0。

获取此矩阵各个列的累加总和,然后创建一个最后一列,该列仅使用相应时间戳上已访问网站类别的值。

尽管这似乎不是一个很好的解决方案,但希望这可以暂时解决您的问题。