4
A
回答
8
這裏的正則表達式有一個解決方案:
x <- c('AAAAABBBBB', 'ABCAAABBBDDD')
gsub("([A-Za-z])\\1+","\\1",x)
編輯:根據要求,一些標杆。我在評論中加入了Matthew Lundberg的模式,與任何角色匹配。看起來gsub
更快一個數量級,並且匹配任何字符比匹配字母更快。
library(microbenchmark)
set.seed(1)
##create sample dataset
x <- apply(
replicate(100,sample(c(LETTERS[1:3],""),10,replace=TRUE))
,2,paste0,collapse="")
##benchmark
xm <- microbenchmark(
SAPPLY = sapply(strsplit(x, ''), function(x) paste0(rle(x)$values, collapse=''))
,GSUB.LETTER = gsub("([A-Za-z])\\1+","\\1",x)
,GSUB.ANY = gsub("(.)\\1+","\\1",x)
)
##print results
print(xm)
# Unit: milliseconds
# expr min lq median uq max
# 1 GSUB.ANY 1.433873 1.509215 1.562193 1.664664 3.324195
# 2 GSUB.LETTER 1.940916 2.059521 2.108831 2.227435 3.118152
# 3 SAPPLY 64.786782 67.519976 68.929285 71.164052 77.261952
##boxplot of times
boxplot(xm)
##plot with ggplot2
library(ggplot2)
qplot(y=time, data=xm, colour=expr) + scale_y_log10()
4
x <- c('AAAAABBBBB', 'ABCAAABBBDDD')
sapply(strsplit(x, ''), function(x) paste0(rle(x)$values, collapse=''))
## [1] "AB" "ABCABD"
+1
:)這是_literally_,字符的字符,我剛剛複製+粘貼作爲答案。 – joran
+0
所以,時間挑戰:在這裏加快sapply或gsub? –
+0
@CarlWitthoft我剛剛給我的答案添加了基準。 –
相關問題
- 1. 去除連續重複值
- 2. Lodash:從陣列中除去連續的重複
- 3. 如何從數據表中去除連續重複記錄?
- 4. MySQL的刪除重複的連續行
- 5. 僅刪除連續的重複行
- 6. MySQL:刪除連續的重複值
- 7. Excel VBA - 消除連續的重複項
- 8. 刪除元組中的連續重複
- 9. perl刪除連續的重複行
- 10. 如何消除連續的重複值
- 11. 刪除重複的連續對象
- 12. 刪除連續的字母重複
- 13. 刪除連續的重複條目
- 14. 在Ruby陣列刪除連續重複
- 15. 快速刪除連續重複python
- 16. 刪除其重複幾次連續
- 17. 消除連續重複列表元素
- 18. 連續/重複MKMapView
- 19. 除去重複行
- 20. 通過類刪除後續重複的元素
- 21. htaccess的重寫的文件名中除去連續數
- 22. 重複的行去除
- 23. 組連續通過
- 24. 通過刪除重疊行來縮短連續日期範圍
- 25. python dict通過鍵值去除重複值?
- 26. 去除連續數組合設置
- 27. 計數連續重複值
- 28. 去除重複複製的字符
- 29. 連接行並丟棄連續的重複或重複元素
- 30. 刪除通過陣列時的重複
您可以在這裏用'.'替換'[A-Za-z]'。 –
謝謝 - 這是相當戲劇性的時間差異。 –
非常感謝,這種方法確實非常高效! – Joe