使用R,如何在数据帧的单个列中标记顺序重复值
这是我的第一篇文章,我是编程和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
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