2017-06-16 69 views
-2

对于给定的数据帧的列:追加到与条件

id |conv 
1 | 0 | 
1 | 0 | 
1 | 0 | 
1 | 1 | 
1 | 0 | 
1 | 1 | 
1 | 0 | 
1 | 0 | 
2 | 0 | 
2 | 1 | 
2 | 0 | 
2 | 1 | 
2 | 1 | 

CONV仅有两个值0或1。基本上,当CONV = 1和ID是相同,则“_1”应该被所附的随后的ids。如果我们得到另一个conv = 1,那么对于相同的id,'_2'应该被附加到id.I需要在每次conv = 1时添加id并且id不会改变。我的输出应该是:

id |conv 
1 | 0 | 
1 | 0 | 
1 | 0 | 
1 | 1 | 
1_1 | 0 | 
1_1 | 1 | 
1_2 | 0 | 
1_2 | 0 | 
2 | 0 | 
2 | 1 | 
2_1 | 0 | 
2_1 | 1 | 
2_2 | 0 | 
2_2 | 0 | 

因为数据是巨大的我不能用于循环。

+0

为什么输入和输出中的'conv'值更改为最后4个值? – akrun

+0

@Sotos我在回答时没有看到你的帖子 – akrun

回答

2

我们可以从avebase R

i1 <- with(df1, ave(conv==1, id, FUN = function(x) cumsum(dplyr::lag(x, default = FALSE)))) 
with(df1, ifelse(i1==0, id, paste(id, i1, sep="_"))) 
4

一个想法做这将是第一次创建指标变量这是convid的cumsum。当conv == 1减1时,只需将非零值粘贴到ID

ind <- with(df, ave(conv, id, FUN = cumsum)) 
ind[df$conv == 1] <- ind[df$conv == 1] - 1 
df$id <- ifelse(ind == 0 , df$id, paste0(df$id, '_', ind)) 
df 
# id conv 
#1 1 0 
#2 1 0 
#3 1 0 
#4 1 1 
#5 1_1 0 
#6 1_1 1 
#7 1_2 0 
#8 1_2 0 
#9 2 0 
#10 2 1 
#11 2_1 0 
#12 2_1 1 
#13 2_2 1