对于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;%,但我很喜欢编程。
感谢您的任何回应。
答案 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.framevowels <- 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)