Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据字符变量中的唯一值获取累积和?_R_Data Manipulation - Fatal编程技术网

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

R 如何根据字符变量中的唯一值获取累积和?,r,data-manipulation,R,Data Manipulation,我有一个df,它表示用户在一段时间内的浏览行为。因此,df包含一个唯一的UserId,每一行都有一个时间戳,表示对某个网站的访问。每个网站都有一个独特的网站Id和一个独特的网站类别,比如c(“电子”、“服装”等等)。 现在,我想计算每行用户访问到该行(包括该行)的每个类别的唯一网站数。我称这个变量为“宽度”,因为它表示用户浏览互联网的宽度 到目前为止,我只设法生成哑代码,通过对每个类别进行过滤,创建每个类别访问的唯一网站的总数,然后用户获取唯一向量的长度,然后进行左连接。 因此,随着时间的推移,

我有一个df,它表示用户在一段时间内的浏览行为。因此,df包含一个唯一的UserId,每一行都有一个时间戳,表示对某个网站的访问。每个网站都有一个独特的网站Id和一个独特的网站类别,比如c(“电子”、“服装”等等)。 现在,我想计算每行用户访问到该行(包括该行)的每个类别的唯一网站数。我称这个变量为“宽度”,因为它表示用户浏览互联网的宽度

到目前为止,我只设法生成哑代码,通过对每个类别进行过滤,创建每个类别访问的唯一网站的总数,然后用户获取唯一向量的长度,然后进行左连接。 因此,随着时间的推移,我确实会丢失有关发展的信息

非常感谢

total_breadth <- df %>% filter(category=="electronics")  %>% 
                         group_by(user_id) %>% 
                           mutate(breadth=length(unique(website_id)))



这似乎是一个拆分、应用和合并的案例。 创建1和0的二进制矩阵,其维度为:

  • 行数=原始数据中的行数
  • 列数=唯一网站类别数
每行表示时间戳,每列表示各自的网站类别。因此,当且仅当用户在各自的时间戳上访问了该网站类别的网站时,单元格将等于1,否则它将为0

获取此矩阵中各个列的累积和,然后创建一个最终列,其中仅获取相应时间戳上已访问网站类别的值


虽然这似乎不是一个优雅的解决方案,但希望这能暂时解决您的问题。

这似乎是一个拆分、应用和合并的案例。 创建1和0的二进制矩阵,其维度为:

  • 行数=原始数据中的行数
  • 列数=唯一网站类别数
每行表示时间戳,每列表示各自的网站类别。因此,当且仅当用户在各自的时间戳上访问了该网站类别的网站时,单元格将等于1,否则它将为0

获取此矩阵中各个列的累积和,然后创建一个最终列,其中仅获取相应时间戳上已访问网站类别的值


虽然这似乎不是一个优雅的解决方案,但希望这能暂时解决您的问题。

您的
左键连接
并没有做您认为它正在做的事情
total_width
已包含所有其他变量加上
width
。如果我正确理解了您使用
过滤器所做的操作,您可能应该将
类别
添加到分组变量中。我不清楚你是如何随时间丢失信息的。如果
df
改变,宽度也会改变。我的df的问题是,宽度变量的计算方法不正确。宽度变量应以累积方式(而非总计)反映基于每个类别的唯一网站ID的宽度。长度(unique())组合计算每个类别每个用户的完整向量上的变量。相关问题:那边答案的核心部分有效。在您想要执行的每组值中,
cummax(作为.numeric(因子(x,levels=unique(x)))
您的
left\u join
没有执行您认为它正在执行的操作
total_width
已包含所有其他变量加上
width
。如果我正确理解了您使用
过滤器所做的操作,您可能应该将
类别
添加到分组变量中。我不清楚你是如何随时间丢失信息的。如果
df
改变,宽度也会改变。我的df的问题是,宽度变量的计算方法不正确。宽度变量应以累积方式(而非总计)反映基于每个类别的唯一网站ID的宽度。长度(unique())组合计算每个类别每个用户的完整向量上的变量。相关问题:那边答案的核心部分有效。在您想要执行的每组值中
cummax(作为.numeric(因子(x,levels=unique(x)))
#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