How to use if contains similar, then in R

Viewed 56

I have the following dataframe and I want to standardise the description in the desc column. If desc contains some permutation of 'employee', to output desc1 as Employment size. And if desc contains some permutation of 'Year', to output desc1 as Year.

How can I do this in R?

desc <- c('Total number of employees','Employees size','Employee','No. of employees','Others','Years','Year','Yr')
value <- c(200,14035,155,663,25626,2018,2019,2020)
emp_data <- data.frame(desc,value)

The output dataframe should look like this:

desc <- c('Total number of employees','Employees size','Employee','No. of employees','Others','Years','Year','Yr')
value <- c(200,14035,155,663,25626,2018,2019,2020)
desc1 <- c('Employment size','Employment size','Employment size','Employment size','','Year','Year','Year')
emp_data <- data.frame(desc,value,desc1)
1 Answers

Using nested ifelse(). If this becomes unmanagable I suggest data.table::fcase() or dplyr::case_when().

emp_data$desc1 <- 
  ifelse(
    grepl("employee", emp_data$desc, ignore.case = TRUE), 
    "Employment size",
    ifelse(
      grepl("Year|Yr", emp_data$desc, ignore.case = TRUE), 
      "Year", 
      ""
    )
  )

#                        desc value           desc1
# 1 Total number of employees   200 Employment size
# 2            Employees size 14035 Employment size
# 3                  Employee   155 Employment size
# 4          No. of employees   663 Employment size
# 5                    Others 25626                
# 6                     Years  2018            Year
# 7                      Year  2019            Year
# 8                        Yr  2020            Year
Related