微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有一个函数可以根据另一列的条件替换列中的特定值?

如何解决是否有一个函数可以根据另一列的条件替换列中的特定值?

我希望将“Manner”列中“文件名”列中包含“kala”、“kalla”的所有单词(前两个首字母表示扬声器)中的当前值从“Sonorant”替换为“Liquid” .

我的想法是它可以通过“dplyr”(可能是“grep”)执行,但不知道如何操作。这可以在 MS Excel 中完成,但手动完成会花费大量时间。

任何帮助都会很棒。提前致谢。

我的一些数据在这里

Filename Consonant           Place   Manner
9   AK_kala.TextGrid Singleton Dental/alveolar Sonorant
10 AK_kalla.TextGrid  Geminate Dental/alveolar Sonorant
14 AK_manni.TextGrid  Geminate Dental/alveolar Sonorant
15  AK_rami.TextGrid Singleton        Bilabial Sonorant
16 AK_rammi.TextGrid  Geminate        Bilabial Sonorant
20  AK_sune.TextGrid Singleton Dental/alveolar Sonorant

解决方法

您可以检查 Filename 列中的模式并将 Manner 列转到 'Liquid'

df$Manner[grep('kall?a',df$Filename)] <- 'Liquid'
#Maybe this is more clear
#df$Manner[grep('kala|kalla',df$Filename)] <- 'Liquid'
df

#            Filename Consonant           Place   Manner
#9   AK_kala.TextGrid Singleton Dental/alveolar   Liquid
#10 AK_kalla.TextGrid  Geminate Dental/alveolar   Liquid
#14 AK_manni.TextGrid  Geminate Dental/alveolar Sonorant
#15  AK_rami.TextGrid Singleton        Bilabial Sonorant
#16 AK_rammi.TextGrid  Geminate        Bilabial Sonorant
#20  AK_sune.TextGrid Singleton Dental/alveolar Sonorant
,
library(tidyverse)
my_data <- tibble::tribble(
            ~Filename,~Consonant,~Place,~Manner,"AK_kala.TextGrid","Singleton","Dental/alveolar","Sonorant","AK_kalla.TextGrid","Geminate","AK_manni.TextGrid","AK_rami.TextGrid","Bilabial","AK_rammi.TextGrid","AK_sune.TextGrid","Sonorant"
  )


my_data %>%
  mutate(Manner = if_else(
    Filename %>% str_detect("kala|kalla"),"Liquid",Manner
  ))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。