2つの答え
a <- data.frame(direction = c("?????+-+-", "?+-+-????","?-+-+??-+"),
stringAsFactors = F)
a$return <- lengths(regmatches(a$direction, gregexpr("\\?", a$direction)))
やコメントどおり
a$return <- nchar(gsub("[^?]", "", a$direction))
の両方が
'data.frame': 3 obs. of 2 variables:
$ direction: chr "?????+-+-" "?+-+-????" "?-+-+??-+"
$ return : int 5 5 3
を返すこれを行う方法のトンがあり、あなたが探しているものに依存しますために。
更新
それは基地Rではないかもしれないが、tidyverse内のパッケージは、データが論争のために有用であり、容易に数コール一緒に文字列に使用することができます。
install.packages("dplyr")
library(dplyr)
df <- data.frame(Direction = c("???????????-?", "???????????+?", "???????????+?", "???????????-?"), stringsAsFactors = F)
df %>%
mutate(qmark = nchar(gsub("[^?]", "", Direction)),
pos = nchar(gsub("[^+]", "", Direction)),
neg = nchar(gsub("[^-]", "", Direction)),
qminus = qmark-(pos+neg),
total = nchar(Direction))
Direction qmark pos neg qminus total
1 ???????????-? 12 0 1 11 13
2 ???????????+? 12 1 0 11 13
3 ???????????+? 12 1 0 11 13
4 ???????????-? 12 0 1 11 13
データセットは、しかし千万ラインの長さであるならば、あなたはいくつかのベンチマークtestingに基づいてstringi
を使用する場合があります。
install.packages("stringi")
library(stringi)
df %>%
mutate(qmark = stri_count(Direction, fixed = "?"),
pos = stri_count(Direction, fixed = "+"),
neg = stri_count(Direction, fixed = "-"),
qminus = qmark-(pos+neg))
本当にこのような形式ですか? SNPは通常0、1、2、またはNAsです。 –
[Rで素晴らしい再生可能サンプルを作成するにはどうすればいいですか?](https://stackoverflow.com/questions/5963269/how-to-make-a-great- (例:r-reproducible-example) – Masoud
'nchar(gsub(" [^ \\?] "、" "、Direction))' – juan