17
A
回答
38
這裏是單程
substring("aabbccccdd", seq(1, 9, 2), seq(2, 10, 2))
#[1] "aa" "bb" "cc" "cc" "dd"
或更一般地
text <- "aabbccccdd"
substring(text, seq(1, nchar(text)-1, 2), seq(2, nchar(text), 2))
#[1] "aa" "bb" "cc" "cc" "dd"
編輯:這是很多,要快得多
sst <- strsplit(text, "")[[1]]
out <- paste0(sst[c(TRUE, FALSE)], sst[c(FALSE, TRUE)])
它首先拆分字符串轉換成字符。然後,將偶數元素和奇怪元素粘貼在一起。
計時
text <- paste(rep(paste0(letters, letters), 1000), collapse="")
g1 <- function(text) {
substring(text, seq(1, nchar(text)-1, 2), seq(2, nchar(text), 2))
}
g2 <- function(text) {
sst <- strsplit(text, "")[[1]]
paste0(sst[c(TRUE, FALSE)], sst[c(FALSE, TRUE)])
}
identical(g1(text), g2(text))
#[1] TRUE
library(rbenchmark)
benchmark(g1=g1(text), g2=g2(text))
# test replications elapsed relative user.self sys.self user.child sys.child
#1 g1 100 95.451 79.87531 95.438 0 0 0
#2 g2 100 1.195 1.00000 1.196 0 0 0
8
string <- "aabbccccdd"
# total length of string
num.chars <- nchar(string)
# the indices where each substr will start
starts <- seq(1,num.chars, by=2)
# chop it up
sapply(starts, function(ii) {
substr(string, ii, ii+1)
})
其中給出
[1] "aa" "bb" "cc" "cc" "dd"
1
人們可以使用一個矩陣來組中的字符:
s2 <- function(x) {
m <- matrix(strsplit(x, '')[[1]], nrow=2)
apply(m, 2, paste, collapse='')
}
s2('aabbccddeeff')
## [1] "aa" "bb" "cc" "dd" "ee" "ff"
不幸的是,第是奇數字符串長度的輸入休息,給予警告:
s2('abc')
## [1] "ab" "ca"
## Warning message:
## In matrix(strsplit(x, "")[[1]], nrow = 2) :
## data length [3] is not a sub-multiple or multiple of the number of rows [2]
更不幸的是,g1
和g2
從@GSee不返回不正確的結果爲奇數字符串長度的輸入:
g1('abc')
## [1] "ab"
g2('abc')
## [1] "ab" "cb"
這裏是s2精神中的功能,對每個組中的字符數取參數,並在必要時留下最後一個條目:
s <- function(x, n) {
sst <- strsplit(x, '')[[1]]
m <- matrix('', nrow=n, ncol=(length(sst)+n-1)%/%n)
m[seq_along(sst)] <- sst
apply(m, 2, paste, collapse='')
}
s('hello world', 2)
## [1] "he" "ll" "o " "wo" "rl" "d"
s('hello world', 3)
## [1] "hel" "lo " "wor" "ld"
(它確實比g2
慢,但通過的7約爲係數比g1
更快)
+0
如果可能有奇數個字符,那麼在我看來,處理這個事實會更快,引入一個'apply'循環。我敢打賭這是更快的:'out < - g2(x);如果(nchar(x)%% 2 == 1L)out [length(out)] < - substring(out [length(out)],1,1); out' – GSee 2013-02-18 19:44:19
1
醜但工程
sequenceString <- "ATGAATAAAG"
J=3#maximum sequence length in file
sequenceSmallVecStart <-
substring(sequenceString, seq(1, nchar(sequenceString)-J+1, J),
seq(J,nchar(sequenceString), J))
sequenceSmallVecEnd <-
substring(sequenceString, max(seq(J, nchar(sequenceString), J))+1)
sequenceSmallVec <-
c(sequenceSmallVecStart,sequenceSmallVecEnd)
cat(sequenceSmallVec,sep = "\n")
給出 ATG AAT AAA ģ
5
有兩種容易的可能性:
s <- "aabbccccdd"
gregexpr
和regmatches
:regmatches(s, gregexpr(".{2}", s))[[1]] # [1] "aa" "bb" "cc" "cc" "dd"
strsplit
:strsplit(s, "(?<=.{2})", perl = TRUE)[[1]] # [1] "aa" "bb" "cc" "cc" "dd"
相關問題
- 1. 如何將字符串拆分爲等長的子字符串?
- 2. 將字符串變量拆分爲指定長度的隨機子字符串
- 3. 如何將字符串拆分爲java中的子字符串
- 4. 如何將字符串拆分爲iOS中的子字符串?
- 5. 如何將字符串拆分爲重複的子字符串
- 6. 將字符串拆分成長度更小的字符串
- 7. Awk--將字符串分成長度爲n的子字符串
- 8. 將字符串拆分爲字符串
- 9. 將字符串拆分爲字符串
- 10. 將可變長度字符串分配給固定長度字符串
- 11. 如何將字符串切成給定長度的子字符串
- 12. 將字符串拆分爲特定長度的組
- 13. 將字符串生成器拆分爲字符串字符串特定字符
- 14. 如何將字符串拆分爲字母字符串和數字字符串?
- 15. 如何根據字符長度拆分字符串
- 16. C#拆分字符串 - 將字符串拆分爲數組
- 17. 如何使用Java將字符串分隔爲一定長度的字符串?
- 18. 將字符串拆分爲「|」
- 19. 將lua字符串拆分爲字符
- 20. 從給定的字符串給定長度的字符的差異字符串
- 21. 在iOS中將字符串拆分爲子字符串
- 22. 使用split.string(「」);將字符串拆分爲子字符串。
- 23. 將長字符串拆分爲指定大小的較小字符串
- 24. C++如何將字符串拆分爲字符串和整數?
- 25. 如何將字符串拆分爲字符串[]?
- 26. 如何將字符串拆分爲字符串數組?
- 27. 如何將長字符串拆分爲固定數組項目
- 28. 如何將字符串分組爲長度爲四的字符串?
- 29. Ruby:將字符串拆分爲最多40個字符的子字符串
- 30. 將字符串拆分成haskell中的子字符串
有趣,不知道'substring'。因爲'substr'不需要向量參數用於開始/結束,所以更好。 – 2012-07-23 20:23:25
輝煌!第二個版本真的非常快! – MadSeb 2012-07-24 01:54:32
我想知道是否有這樣的事情會將「aabbbcccccdd」分成aa bbb ccccc dd 我現在使用grepexpr。 – jackStinger 2013-01-07 12:32:50