Объединение функций изменения и фильтрации - PullRequest
0 голосов
/ 18 мая 2018

Я начинающий, когда дело доходит до языка R, так что извините, если я дублирую вопрос, кстати, я использую пакеты tidyverse.

Моя проблема заключается в следующем: у меня есть кадр данных, в котором один столбец выглядит так

pre_schwa
IY0
SH
Z
+1500 rows

Теперь мне нужно создать столбец (переменную), который соответствует этому конкретному столбцу.Я создал четыре вектора:

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")

Имея это, я хочу создать столбец с именем sonority_grouped, который будет состоять из четырех имен (гласных, сонорантов, фрикативов, остановок) в зависимости от того, какой символ находится в столбце pre_schwa, поэтому я хочуэто похоже на это

  pre_schwa              sonority_grouped
  SH                     fricatives
  ER0                    vowels
  B                      stops
  Z                      fricative
  +1500 rows

Я пытался объединить функции mutate() и filter() на%>%, но я плохо программирую.Спасибо за любой ответ.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы также можете использовать 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",
  ))
0 голосов
/ 18 мая 2018

Данные

df <- read.table(text="pre_schwa
IY0
SH
Z", header=TRUE, stringsAsFactors=FALSE)

Я рекомендую преобразовать ваши отдельные векторы в data.frame через

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))

В качестве альтернативы, как указано в MrFlick, вы можете использовать lattice::make.groups(...)

df2 <- lattice::make.groups(vowels, sonorants, fricatives, stops) %>% 
          dplyr::rename(pre_schwa=data, sonority_grouped=which)    

Затем вы можете использовать dplyr::left_join для получения вашего результата

ans <- dplyr::left_join(df, df2, by=c("pre_schwa" = "values"))
  # pre_schwa        ind
# 1       IY0     vowels
# 2        SH fricatives
# 3         Z fricatives

С ответом MrFlick используйте

ans <- dplyr::left_join(df, df2)
...