Dre
Dre

Reputation: 723

How to change a value in a column dependent on a grepl in R

I would like to change the values in one column depending on what I match in a grepl from another column in my data.frame.

Example of Data.frame:

df
SHOT    CLASS     DATA_TEXT
shot1   missed     missed Jumper
shot2   made       made Three Point Jumper
shot3   made       made Jumper 

what I have been trying:

df$SHOT_TYPE <- as.vector(0) #create new variable

for (i in 1:length(df)) {
if(grepl("e Jumper", df$DATA_TEXT[i]))  { df$SHOT_TYPE <- "Jumper" 
} else if(grepl("d Jumper", df$DATA_TEXT[i]))  { df$SHOT_TYPE <- "Jumper" 
} else if(grepl("t Jumper", df$DATA_TEXT[i]))  { df$SHOT_TYPE <- "Three" } }

Doing this method each if statement just overwrites the last.

My current results:

df
SHOT    CLASS    DATA_TEXT                 SHOT_TYPE
shot1   missed   missed Jumper             Three
shot2   made     made Three Point Jumper   Three
shot3   made     made Jumper               Three

What I would like the results to look like:

df
SHOT    CLASS    DATA_TEXT                 SHOT_TYPE
shot1   missed   missed Jumper             Jumper
shot2   made     made Three Point Jumper   Jumper
shot3   made     made Jumper               Three

Any help will be appreciated. Please let me know if any further information is needed.

Upvotes: 0

Views: 1749

Answers (1)

Gopala
Gopala

Reputation: 10473

How about something like this:

df$SHOT_TYPE <- ifelse(grepl('d Jumper|t Jumper', df$DATA_TEXT), 'Jumper',
                       ifelse(grepl('e Jumper', df$DATA_TEXT), 'Three', NA))

Produces output:

   SHOT  CLASS               DATA_TEXT SHOT_TYPE
1 shot1 missed           missed Jumper    Jumper
2 shot2   made made Three Point Jumper    Jumper
3 shot3   made            made Jumper      Three

NOTE: I coded as NA the columns that don't match the three patterns. You can modify the code to suit what you need.

Upvotes: 1

Related Questions