使用R,如何在数据帧的单个列中标记顺序重复值

使用R,如何在数据帧的单个列中标记顺序重复值,r,duplicates,R,Duplicates,这是我的第一篇文章,我是编程和R的新手 我正在尝试创建一个新列,以在单独的列中标记或标记顺序重复的值 dfrle将与rep rl <- rle( df ) rep( rl$lengths != 1 , times = rl$lengths ) # [1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE # [15] TRUE 既然你有200多万,我建议你真的切换到d

这是我的第一篇文章,我是编程和R的新手

我正在尝试创建一个新列,以在单独的列中标记或标记顺序重复的值


df
rle
将与
rep

rl <- rle( df )
rep( rl$lengths != 1 , times = rl$lengths )
#  [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
# [15]  TRUE

既然你有200多万,我建议你真的切换到
data.table
。在这里,我的解决方案使用了
rle
,类似于@simonone,我只需编写它的
data.table
版本。我相信这并不总是显而易见的,特别是对于初学者(比如我在data.table下)

库(data.table)
种子集(1234)

哈哈!我开始用
rle
思考这个问题,然后我看到了你的答案并切换了。现在您已切换到
rle
:)我猜你在我之前就意识到,旧的方法是行不通的。向上投票。@asb lol,这经常发生在我身上!!谢谢你的支持:-)+1我本来打算这么做的,老实说!我只是觉得我要花很长时间才能弄明白-我仍然不擅长
数据。表
做得很好。如果不使用
rle
两次,你可能会更快?因为你在这里相对较新,你可能想读一读关于它是如何工作的。如果当您收到解决问题的答案时,您通过单击小复选标记或向上投票一个有用的答案来接受它,那么StackOverflow对每个人来说都更有价值。你绝对没有义务这样做,但是如果一个答案确实解决了你的问题,并且有助于保持网站没有未回答的问题,那么这是一个“回馈”网站的好方法。谢谢
   value  flag  
1      2  TRUE  
2      2  TRUE  
3      2  TRUE  
4      2  TRUE  
5      3  FALSE  
6      4  FALSE  
7      3  FALSE  
8      4  FALSE  
9      3  FALSE  
10     4  FALSE  
11     2  FALSE  
12     3  FALSE  
13     7  TRUE    
14     7  TRUE    
15     7  TRUE     
rl <- rle( df )
rep( rl$lengths != 1 , times = rl$lengths )
#  [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE
# [15]  TRUE
system.time({ rl <- rle( df )
res <- rep( rl$lengths != 1 , times = rl$lengths )
 })
#   user  system elapsed 
#  0.449   0.106   0.559
library(data.table)
set.seed(1234)
dd <- sample(1:20, 2e+06, rep = TRUE)
DT <- data.table(dd)
system.time(DT[, `:=`(grp2, {
                            dd.rle = rle(dd)  ## store rle to not call it twice
                            rep(dd.rle$lengths > 1, times = dd.rle$lengths)
             })])
##    user  system elapsed 
##    1.17    0.06    1.28
##    user  system elapsed  <- rle twice
##    1.69    0.11    1.86

##        dd  grp2
## 1e+00:  3 FALSE
## 2e+00: 13  TRUE
## 3e+00: 13  TRUE
## 4e+00: 13  TRUE
## 5e+00: 18 FALSE
##    ---         
## 2e+06:  6 FALSE
## 2e+06:  5 FALSE
## 2e+06:  4 FALSE
## 2e+06: 10 FALSE
## 2e+06: 13 FALSE