【问题标题】:conditional mutate by dplyrdplyr 的条件变异
【发布时间】:2017-08-30 04:48:00
【问题描述】:

我想在我的数据集中创建一个新列: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。任何人都可以启发我吗?谢谢!

【问题讨论】:

  • 你试过从tidyversecase_when吗?

标签: r dplyr substr


【解决方案1】:

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

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

【讨论】:

  • 不工作,返回错误:Error in mutate_impl(.data, dots) : Evaluation error: 'nchar()' requires a character vector.
【解决方案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)
  ))

【讨论】:

    猜你喜欢
    • 2017-06-02
    • 2017-12-30
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    相关资源
    最近更新 更多