dplyr 的条件变异

conditional mutate by dplyr

我想在我的数据集中创建一个新列:i) 如果单词本身以 "vi" 开头,则删除最后 1 个字符; ii) 如果单词本身不以 "vi" 开头,则删除最后 2 个字符。我知道如何在 R 中处理它,如下所示:

iris$Species <- as.character(iris$Species)
iris$Species_mod <- substr(iris$Species,
                           1,
                           ifelse(grepl('^vi',iris$Species),
                                  nchar(iris$Species)-1,
                                  nchar(iris$Species)-2))

但是我很难破译dplyr中的mutateif_elsematches。谁能启发我?谢谢!

相同的想法,除了您明确需要将因子转换为字符串

iris = mutate(iris, Species_mod = substr(Species, 1, nchar(as.character(Species)) - 
    ifelse(grepl('^vi', Species), 1, 2)))

您可以尝试类似的方法:

iris %>%
  mutate(Species = as.character(Species))  %>%
  rowwise() %>%
  mutate(species2 = case_when(
    Species == 'vi%' ~ substr(Species, 0, nchar(Species) - 1),
    Species != 'vi%' ~ substr(Species, 0, nchar(Species) - 2)
  ))