这是我的第一篇文章,我是编程和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万个观测值,所以理想情况下解决方案是有效的.
谢谢你,约翰
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)