name_type
apple-watch
apple-tablet
apple
apple-orange-watch
apple-orange-tablet
apple-orange
How do I add -laptop
to the elements that don't end with -watch
or -tablet
? For example, row 3 would become apple-laptop
; row 6 would become apple-orange-laptop
.
library(tidyverse)
tibble(
name_type = c(
"apple-watch", "apple-tablet", "apple",
"apple-orange-watch", "apple-orange-tablet", "apple-orange"
)
) -> toy_data
library(tidyverse)
suppressPackageStartupMessages({
library(dplyr)
library(stringr)
}
)
tibble(
name_type = c(
"apple-watch", "apple-tablet", "apple",
"apple-orange-watch", "apple-orange-tablet", "apple-orange"
)
) -> toy_data
toy_data %>% mutate(name_type = ifelse(str_detect(name_type,"-") == FALSE,paste(name_type,"-laptop"),name_type))
#> # A tibble: 6 x 1
#> name_type
#> <chr>
#> 1 apple-watch
#> 2 apple-tablet
#> 3 apple -laptop
#> 4 apple-orange-watch
#> 5 apple-orange-tablet
#> 6 apple-orange
Created on 2020-08-06 by the reprex package (v0.3.0)
1 Like
Thanks a lot @technocrat !
Just realized that the last row i.e. row 6 does not get the intended outcome.
library(tidyverse)
suppressPackageStartupMessages({
library(dplyr)
library(stringr)
}
)
tibble(
name_type = c(
"apple-watch", "apple-tablet", "apple",
"apple-orange-watch", "apple-orange-tablet", "apple-orange"
)
) -> toy_data
devices <- c("watch","tablet","laptop")
toy_data %>% mutate(name_type = ifelse(str_detect(name_type,"-") == FALSE ,paste0(name_type,"-laptop"),name_type)) %>%
mutate(name_type = ifelse(str_detect(name_type,devices),name_type,paste0(name_type,"-laptop")))
#> # A tibble: 6 x 1
#> name_type
#> <chr>
#> 1 apple-watch
#> 2 apple-tablet
#> 3 apple-laptop
#> 4 apple-orange-watch
#> 5 apple-orange-tablet
#> 6 apple-orange-laptop
Created on 2020-08-06 by the reprex package (v0.3.0)
1 Like
Adding onto the earlier response the 6th row does not get the mutate since it already has the "-" and hence the ifelse fails.
Try the following
toy_data %>% mutate(name_type = ifelse(!stringi::stri_extract_last_words(name_type) %in% c("watch","tablet") ,paste0(name_type,"-laptop"),name_type))
Notice the "!" for negation and using stringi package for getting the last word and then checking against your keywords.
2 Likes
system
Closed
August 14, 2020, 5:12am
7
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.