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

Joh*_*ere 5 r duplicates

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

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

df < - c(2,2,2,2,3,4,3,4,3,4,2,3,7,7,7))

使用重复的函数返回以下内容:

data.frame(value = df,flag = duplicated(df))

   value  flag  
1      2  FALSE  
2      2  TRUE  
3      2  TRUE  
4      2  TRUE  
5      3  FALSE  
6      4  FALSE  
7      3  TRUE  
8      4  TRUE  
9      3  TRUE  
10     4  TRUE  
11     2  TRUE  
12     3  TRUE  
13     7  FALSE  
14     7  TRUE  
15     7  TRUE   
Run Code Online (Sandbox Code Playgroud)

我想要的是:

   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     
Run Code Online (Sandbox Code Playgroud)

我的数据集有超过200万个观测值,所以理想情况下解决方案是有效的.

谢谢你,约翰

Sim*_*lon 7

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
Run Code Online (Sandbox Code Playgroud)

我相信这rle是相当有效的.

在2e6长度向量上的时间(MBP晚期):

system.time({ rl <- rle( df )
res <- rep( rl$lengths != 1 , times = rl$lengths )
 })
#   user  system elapsed 
#  0.449   0.106   0.559
Run Code Online (Sandbox Code Playgroud)