首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用case_when和contains进行变异

使用case_when和contains进行变异
EN

Stack Overflow用户
提问于 2017-04-29 21:24:43
回答 2查看 19.9K关注 0票数 16

我觉得应该有一种有效的方法来使用case_whencontainsdplyr中修改新列,但却无法使其正常工作。

我知道在mutate中使用case_when是“一些试验性的”(就像在this的帖子中一样),但如果有任何建议,我将不胜感激。

不起作用:

代码语言:javascript
复制
library(tidyverse)

set.seed(1234)

x <- c("Black", "Blue", "Green", "Red")

df <- data.frame(a = 1:20, 
                 b = sample(x,20, replace=TRUE))

df <- df %>%
  mutate(group = case_when(.$b(contains("Bl")) ~ "Group1",
                 case_when(.$b(contains("re", ignore.case=TRUE)) ~ "Group2")
  )  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-29 21:27:50

我们可以使用grep

代码语言:javascript
复制
df %>%  
   mutate(group = case_when(grepl("Bl", b) ~ "Group1",
                            grepl("re", b, ignore.case = TRUE) ~"Group2"))
#    a     b  group
#1   1 Black Group1
#2   2 Green Group2
#3   3 Green Group2
#4   4 Green Group2
#5   5   Red Group2
#6   6 Green Group2
#7   7 Black Group1
#8   8 Black Group1
#9   9 Green Group2
#10 10 Green Group2
#11  1 Green Group2
#12  2 Green Group2
#13  3  Blue Group1
#14  4   Red Group2
#15  5  Blue Group1
#16  6   Red Group2
#17  7  Blue Group1
#18  8  Blue Group1
#19  9 Black Group1
#20 10 Black Group1
票数 38
EN

Stack Overflow用户

发布于 2020-12-10 12:30:29

我想添加一些使用带有paste0函数的str_detect的示例,该函数也会使连接公共组变得轻而易举。假设你正在与gapminder或其他国家的df合作。

代码语言:javascript
复制
interest <- c("Austria", "Belgium", "Bulgaria", "Croatia", "Cyprus",
              "Czech Republic", "Denmark", "Estonia", "Finland",
              "France", "Germany", "Greece", "Hungary", "Ireland",
              "Italy", "Latvia", "Lithuania", "Luxembourg","Malta",
              "The Netherlands", "Poland","Portugal", "Romania",
              "Slovakia", "Slovenia","Spain", "Sweden","United Kingdom")
EU <- paste0(countrycode::countryname(
  sourcevar = interest, destination = "iso2c"), 
  sep = "|", collapse = "")

df%<>%mutate(Region=case_when(
  str_detect(Country, "AT|BE|BG|HR|CY|CZ|DK|EE|FI|FR|DE|GR|HU|IE|
           IT|LV|LT|LU|MT|NL|PL|PT|RO|SK|SI|ES|SE|GB|UK|G8")~ "EU",
  TRUE ~ "Not EU")) ```

You'll need to load `library(magittr)` to get `%<>%` the compound pipe to work, it's basically an abbreviation of `df<-funs(df)`
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43696227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档