【发布时间】:2018-08-11 07:49:09
【问题描述】:
我想根据格式对字符串进行不同的变异。此示例基于包含某些标点符号有 2 种格式。向量的每个元素都包含与格式唯一关联的特定单词。
我用 ifelse 和 casewhen 尝试了多种方法,但没有得到想要的结果,即“保留”字符串的最后一部分。
我正在尝试使用简单的动词,但不精通 grex。接受任何关于有效通用方法的建议。
library(dplyr)
library(stringr)
df <- data.frame(KPI = c("xxxxx.x...Alpha...Keep.1",
"xxxxx.x...Alpha..Keep.2",
"Bravo...Keep3",
"Bravo...Keep4",
"xxxxx...Charlie...Keep.5",
"xxxxx...Charlie...Keep.6"))
dot3dot3split <- function(x) strsplit(x, "..." , fixed = TRUE)[[1]][3]
dot3dot3split("xxxxx.x...Alpha...Keep.1") # returns as expected
"Keep.1"
dot3split <- function(x) strsplit(x, "..." , fixed = TRUE)[[1]][2]
dot3split("Bravo...Keep3") # returns as expected
"Keep3"
df1 <- df %>% mutate_if(is.factor, as.character) %>%
mutate(KPI.v2 = ifelse(str_detect(KPI, paste(c("Alpha", "Charlie"), collapse = '|')), dot3dot3split(KPI),
ifelse(str_detect(KPI, "Bravo"), dot3split(KPI), KPI))) # not working as expected
df1$KPI.v2 “Keep.1” “Keep.1” “Alpha” “Alpha” “Keep.1” “Keep.1”
【问题讨论】:
标签: r if-statement stringr dplyr