I am a beginner when it comes to R language so sorry if I am duplicating a question btw I use tidyverse packages.
My problem is at follows: I have a dataframe in which one column looks like that
pre_schwa
IY0
SH
Z
+1500 rows
Now I need to create a column(variable) which corresposnds to this specific column. I created four vectors:
vowels <- c("AY1", "ER0", "IY0", "IY1", "UW2")
sonorants <- c("M","N", "R", "Y", "ZH", "W")
fricatives <- c("F", "S", "SH", "TH", "V", "Z")
stops <- c("B", "CH", "D", "G", "JH", "K", "P", "T")
Having this I want to create a column called sonority_grouped which would consist of four names(vowels, sonorants, fricatives, stops) depending what character is in the pre_schwa column so I want it to look like this
  pre_schwa              sonority_grouped
  SH                     fricatives
  ER0                    vowels
  B                      stops
  Z                      fricative
  +1500 rows
I tried combining mutate() and filter() functions by %>% but I suck at programming.
Thank you for any reponse.
You can also use case_when.
df %>%
  mutate(sonority_grouped = case_when(
    pre_schwa %in% vowels ~ "vowels",
    pre_schwa %in% sonorants ~ "sonorants",
    pre_schwa %in% fricatives ~ "fricatives",
    pre_schwa %in% stops ~ "stops",
  ))
                        Data
df <- read.table(text="pre_schwa
IY0
SH
Z", header=TRUE, stringsAsFactors=FALSE)
I recommend converting your individual vectors into a data.frame via
vowels <- c("AY1", "ER0", "IY0", "IY1", "UW2")
sonorants <- c("M", "N",  "R",  "Y",  "ZH", "W")
fricatives <- c("F", "S", "SH", "TH", "V", "Z")
stops <- c("B", "CH", "D", "G", "JH", "K", "P", "T")
patterns <- c("vowels", "sonorants", "fricatives", "stops")
df2 <- stack(mget(patterns))
Alternatively, as pointed by MrFlick, you can use lattice::make.groups(...)
df2 <- lattice::make.groups(vowels, sonorants, fricatives, stops) %>% 
          dplyr::rename(pre_schwa=data, sonority_grouped=which)    
Then you can use dplyr::left_join to obtain your result
ans <- dplyr::left_join(df, df2, by=c("pre_schwa" = "values"))
  # pre_schwa        ind
# 1       IY0     vowels
# 2        SH fricatives
# 3         Z fricatives
With MrFlick's answer use
ans <- dplyr::left_join(df, df2)
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With