Reputation: 723
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
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