Gianluca
Gianluca

Reputation: 6657

Add column to data frame which returns 1 if string match a certain pattern

I want to add a column to an existing data frame which identifies if the element in that row contains a specific pattern.

I though about using the transform() function to do it. Using the iris dataset,

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

> tail(iris)
    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
145          6.7         3.3          5.7         2.5 virginica
146          6.7         3.0          5.2         2.3 virginica
147          6.3         2.5          5.0         1.9 virginica
148          6.5         3.0          5.2         2.0 virginica
149          6.2         3.4          5.4         2.3 virginica
150          5.9         3.0          5.1         1.8 virginica

I would like to add a column which on identifies if the Species end with the string sa. In regex I can use the expression .*(sa) to flag the right strings.

How can I write a function which does populate the column with 1 if the Species ends with sa and 0 if it doesn't?

Upvotes: 0

Views: 1578

Answers (1)

talat
talat

Reputation: 70266

How about

iris$check <- as.numeric(grepl(".*(sa)", iris$Species))

grepl returns a logical vector (TRUE/FALSE) which can easily be converted to 1/0 by using as.numeric.

Also possible:

iris$check <- grepl(".*(sa)", iris$Species) + 0L

Upvotes: 4

Related Questions