Вы можете использовать gsub
с [^+]
, чтобы извлечь все +
и nchar
, чтобы получить их число.
x$b <- +(nchar(gsub("[^+]", "", x$a)) == 1)
x
# a b
#1 y~x1+x2 1
#2 y~x2+x3 1
#3 y~x1+x2+x3 0
#4 y~x2+x4 1
#5 y~x1+x3+x4 0
Или использовать gregexpr
:
lapply(gregexpr("\\+", x$a), length) == 1
#[1] TRUE TRUE FALSE TRUE FALSE
Или используя его с lengths
как предложено @ThomasIsCoding:
lengths(gregexpr("\\+", x$a)) == 1
#[1] TRUE TRUE FALSE TRUE FALSE
Или используя grepl
:
grepl("^[^+]*\\+[^+]*$", x$a)
#[1] TRUE TRUE FALSE TRUE FALSE
Или с strsplit
:
sapply(strsplit(x$a, ""), function(y) sum(y == "+")==1)
#[1] TRUE TRUE FALSE TRUE FALSE
Данные:
x <- read.table(header=TRUE, text="a
1 y~x1+x2
2 y~x2+x3
3 y~x1+x2+x3
4 y~x2+x4
5 y~x1+x3+x4", stringsAsFactors = FALSE)