结合mutate和filter函数

时间:2018-05-18 15:30:53

标签: r variables filter mutate

对于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()函数合并为%&gt;%,但我很喜欢编程。 感谢您的任何回应。

2 个答案:

答案 0 :(得分:5)

您也可以使用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",
  ))

答案 1 :(得分:3)

数据

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)