Renaming Items in a Data Frame

Hi, I was wondering what is the best way to change all of the "FT" items in this data frame to "SI".

p <- data.frame(stringsAsFactors=FALSE,
pitcher_name = c("Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom",
"Jacob deGrom", "Jacob deGrom"),
pitch_type = c("FF", "FF", "FF", "FF", "FF", "FF", NA, NA, NA, NA, NA, NA,
"FF", "CU", "CU", "FF", "FF", "FF",
"FF", "FF", "FF", "FF", "FF", "FF", "FT",
"CH", "CH", "CU", "FT", "CH")
)

I have tried this code but it does not seem to work when I try to put it back in the data frame.

#temp <- p$pitch_type
#temp[which(temp=="FT")]
#temp[which(temp=="FT")] <- "SI"

Try with dplyr I personally find it easier to read and understand than base R

p <- data.frame(stringsAsFactors=FALSE,
                pitcher_name = c("Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom",
                                 "Jacob deGrom", "Jacob deGrom"),
                pitch_type = c("FF", "FF", "FF", "FF", "FF", "FF", NA, NA, NA, NA, NA, NA,
                               "FF", "CU", "CU", "FF", "FF", "FF",
                               "FF", "FF", "FF", "FF", "FF", "FF", "FT",
                               "CH", "CH", "CU", "FT", "CH")
)

library(dplyr)

p <- p %>% 
    mutate(pitch_type = if_else(pitch_type == "FT", "SI", pitch_type))
p
#>    pitcher_name pitch_type
#> 1  Jacob deGrom         FF
#> 2  Jacob deGrom         FF
#> 3  Jacob deGrom         FF
#> 4  Jacob deGrom         FF
#> 5  Jacob deGrom         FF
#> 6  Jacob deGrom         FF
#> 7  Jacob deGrom       <NA>
#> 8  Jacob deGrom       <NA>
#> 9  Jacob deGrom       <NA>
#> 10 Jacob deGrom       <NA>
#> 11 Jacob deGrom       <NA>
#> 12 Jacob deGrom       <NA>
#> 13 Jacob deGrom         FF
#> 14 Jacob deGrom         CU
#> 15 Jacob deGrom         CU
#> 16 Jacob deGrom         FF
#> 17 Jacob deGrom         FF
#> 18 Jacob deGrom         FF
#> 19 Jacob deGrom         FF
#> 20 Jacob deGrom         FF
#> 21 Jacob deGrom         FF
#> 22 Jacob deGrom         FF
#> 23 Jacob deGrom         FF
#> 24 Jacob deGrom         FF
#> 25 Jacob deGrom         SI
#> 26 Jacob deGrom         CH
#> 27 Jacob deGrom         CH
#> 28 Jacob deGrom         CU
#> 29 Jacob deGrom         SI
#> 30 Jacob deGrom         CH

Created on 2019-06-21 by the reprex package (v0.3.0)

Just to let you know about two base R solutions:

within(data = p,
       expr = {
         pitch_type <- ifelse(test = (pitch_type == "FT"),
                              yes = "SI",
                              no = pitch_type)
         }
       )

and

within(data = p,
       expr = {
         pitch_type <- replace(x = pitch_type,
                               list = (pitch_type == "FT"),
                               values = "SI")
         }
       )
1 Like

Thank you for your help!

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.