首页 > 解决方案 > 在 R 中创建合成用户数据;生成用户标识符变量的问题

问题描述

我正在尝试生成合成用户事件日志数据以用于演示目的。这将是非常基本的特征(总共大约 4 个变量)。这是我到目前为止所拥有的:-

require(wakefield)#for generating the Status variable
require(dplyr)
require(stringi)


set.seed(1)
#data<-data.frame()
eventDate<-seq(as.Date("2015-01-01"), as.Date("2015-12-31"), by = "1 day")
eventDate<-sample(rep(eventDate,each=1000),replace = T)

u <- runif(length(eventDate), 0, 60*60*12) # "noise" to add or subtract from some timepoint
eventDateTime<-as.POSIXlt(u, origin = paste0(eventDate,"00:00:00"))
eventDateTime

eventOutcome<-r_sample_factor(x = c("Passed", "Failed", "Ongoing","Unknown"), n=length(eventDate))
eventOutcome

data<-data.frame(eventDate,eventDateTime,eventOutcome)
head(data)

# eventDate       eventDateTime eventOutcome
#1 2015-01-25 2015-01-25 04:48:47      Unknown
#2 2015-05-05 2015-05-05 09:35:22      Unknown
#3 2015-11-28 2015-11-28 08:56:16       Failed
#4 2015-05-23 2015-05-23 02:24:52      Ongoing
#5 2015-01-26 2015-01-26 07:43:52       Failed
#6 2015-10-22 2015-10-22 03:07:14       Passed

这里大约有 365000 行数据。剩下要做的就是添加一个用户标识符变量。如果某些用户可能会在数据集中记录一些交互,而某些用户可能有数十/数百/数千次交互(我希望这个数据集具有这种可变性),我会很高兴。

我可以创建一个用户标识符变量没问题:-

UserId<-stri_rand_strings(1300,6)

但是,如果我将其添加到数据中,它将不起作用:-

data$UserId<-stri_rand_strings(1300,6)

Error in `$<-.data.frame`(`*tmp*`, UserId, value = c("k3QlXs", "gK3eBa",  : 
  replacement has 1300 rows, data has 365000

所以我的要求有两个:如何将用户标识符变量分配给这种数据;我怎样才能使它可变,其中一些用户有 1 或几个交互,而其他用户会频繁出现(即数十、数百、数千次)?

提前感谢您的任何帮助,始终不胜感激:)

标签: rstringdataframeeventsrandom

解决方案


一种选择可能是为每个用户生成一个 UUID。UUID 如下所示:

c7f2dde5-dfeb-45cb-9720-87b23effd45d

如果使用好的 UUID 生成器,那么几乎不可能多次生成相同的 UUID。R有一个uuid可以使用的包:

library(uuid)

user_uuid <- UUIDgenerate()

推荐阅读