R 基于假数据集的总和值创建单个行
我正在创建一个假数据集,并希望从本质上分解一个总和,以创建可以填充随机日期的虚拟行 例如,我的R 基于假数据集的总和值创建单个行,r,R,我正在创建一个假数据集,并希望从本质上分解一个总和,以创建可以填充随机日期的虚拟行 例如,我的df可能如下所示: id orders skips joe 3 0 mary 2 1 jack 5 1 我想生成的是一个data.frame或data.table如下所示,其中成功的order是1,跳过是0: id order joe 1 joe 1 joe 1 mary 1 mary 0 mary 1 jack 1
df
可能如下所示:
id orders skips
joe 3 0
mary 2 1
jack 5 1
我想生成的是一个data.frame
或data.table
如下所示,其中成功的order
是1
,跳过是0
:
id order
joe 1
joe 1
joe 1
mary 1
mary 0
mary 1
jack 1
jack 1
jack 1
jack 1
jack 0
jack 1
添加:理想情况下,如果可能,0
值将随机混合/夹在1
值之间。这是由于数据集在问题集中的用途有点奇怪
在一个完美的世界中,我会从给定的范围为id
中的每个订单分配一个随机的开始日期,这样:
id order date
joe 1 1/2/2016
joe 1 1/3/2016
joe 1 1/8/2016
mary 1 1/10/2016
mary 0 1/3/2016
mary 1 1/5/2016
jack 1 1/7/2016
jack 1 1/2/2016
jack 1 1/1/2016
jack 1 1/10/2016
jack 0 1/12/2016
jack 1 1/15/2016
我最初认为我可以结合使用dcast
和重塑
来欺骗R生成数据集,例如dcast(df,id~orders,fun.aggregate=length)
,但这让我走错了路
但是,在他们爬行之前,必须先走路。有人能帮忙吗?这里有一种方法可以处理数据。表
:
dt[, .(order = rep(c(1, 0), c(orders, skips))), by = "id"]
# id order
#1: joe 1
#2: joe 1
#3: joe 1
#4: mary 1
#5: mary 1
#6: mary 0
#7: jack 1
#8: jack 1
#9: jack 1
#10: jack 1
#11: jack 1
#12: jack 0
数据:
library(data.table)
dt <- fread(
"id orders skips
joe 3 0
mary 2 1
jack 5 1"
)
库(data.table)
dt以下是一种使用数据的方法。表
:
dt[, .(order = rep(c(1, 0), c(orders, skips))), by = "id"]
# id order
#1: joe 1
#2: joe 1
#3: joe 1
#4: mary 1
#5: mary 1
#6: mary 0
#7: jack 1
#8: jack 1
#9: jack 1
#10: jack 1
#11: jack 1
#12: jack 0
数据:
library(data.table)
dt <- fread(
"id orders skips
joe 3 0
mary 2 1
jack 5 1"
)
库(data.table)
dt您可以使用tapply
(或者split
和lapply
,如果您愿意的话)在基本R中执行,然后rbind
将所有内容重新组合在一起:
df2 <- do.call(rbind, tapply(df, df$id,
function(x){
data.frame(id = rep(x$id, sum(x$orders, x$skips)),
order = sample(rep(c(1, 0), c(x$orders, x$skips)))
)
}))
rownames(df2) <- NULL
您可以在基本R中使用taply
(或者split
和lappy
,如果愿意的话)然后rbind
将所有内容重新组合在一起:
df2 <- do.call(rbind, tapply(df, df$id,
function(x){
data.frame(id = rep(x$id, sum(x$orders, x$skips)),
order = sample(rep(c(1, 0), c(x$orders, x$skips)))
)
}))
rownames(df2) <- NULL
@josliber我添加了一些我的想法(dcast
和重塑
),但我不想让任何人陷入一个我知道是错误的兔子洞。希望这有帮助x@josliber我添加了一些我的想法(dcast
和重塑
),但我不想让任何人陷入一个我知道是错误的兔子洞。希望这有帮助<代码>x现在不在我的问题中(我将返回并编辑),但您是否有任何想法,我可以如何使其尽可能使0位于中间行?e、 例如,第6行将是第5行。这是假数据集将用于解决的问题的一个怪癖。我现在的问题不是(我将返回并编辑),但您是否有任何想法,我可以如何使0尽可能位于中间行?e、 例如,第6行将是第5行。这是假数据集将用于的问题的一个怪癖。