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中的mutate
、if_else
和matches
。谁能启发我?谢谢!
相同的想法,除了您明确需要将因子转换为字符串
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)
))
我想在我的数据集中创建一个新列: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中的mutate
、if_else
和matches
。谁能启发我?谢谢!
相同的想法,除了您明确需要将因子转换为字符串
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)
))