r - 将 case_when i r dplyr 与 OR 一起使用

标签 r dplyr

我的数据中有此列:

table(data$year)
2011 2012 2013 2014 2015 2016 2017 2018 2019 
   2   28   17   36   26   29   37   33   10

is.numeric(data$year)
[1] TRUE

我想使用以下代码对 case_when 进行变异:

data <- data %>%
  mutate(periode_2a = case_when(
    year >= 2011 && year <= 2013  ~ "2011-2013",
    year >= 2014 && year <= 2015 ~ "2014-2015",
    year >= 2016 && year <= 2017 ~ "2013-2017",
    TRUE ~ "2018-2019"
  ))

我认为这是显而易见的:我想对年份进行分类。

我了解到:

table(data$periode_2a)

2011-2013 
      218 

我尝试过其他风格:

> data <- data %>%
+   mutate(periode_2a = case_when(
+     year == 2011:2013 ~ "2011-2013",
+     year == 2014:2015 ~ "2014-2015",
+     year == 2016:2017 ~ "2013-2017",
+     TRUE ~ "2018-2019"
+   ))

> data <- data %>%
+   mutate(periode_2a = case_when(
+     year == "2011"|"2012"|"2013" ~ "2011-2013",
+     year == "2014"|"2015" ~ "2014-2015",
+     year == "2016"|"2017" ~ "2013-2017",
+     TRUE ~ "2018-2019"
+   ))

没有成功...

我做错了什么?

感谢大家

最佳答案

我们可以使用 %in% 来表示长度大于 1 的向量

library(dplyr)
data %>%
  mutate(periode_2a = case_when(
    year  %in% 2011:2013 ~ "2011-2013",
    year %in% 2014:2015 ~ "2014-2015",
    year %in% 2016:2017 ~ "2013-2017",
    TRUE ~ "2018-2019"
   ))

== 对于按元素操作非常有用,即如果两个对象的长度在运算符中的长度相同(或者如果 rhs 的长度为 1 - 它会被回收)。当有多个元素时,一旦达到向量的长度,逐元素比较的回收就会重置。关于&&的使用,它返回单个TRUE/FALSE输出

关于r - 将 case_when i r dplyr 与 OR 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63512910/

相关文章:

r - ggplot 中条形的排序

r - 在 R 中使用 causalweight 包

r - 组低频计入单个 'other' 类别

r - 使用 dplyr 包进行过滤

r - 如何将列重命名为变量名 "in a tidyverse way"

r - 具有基于另一个数据框条件的总和的新数据框

r - 有没有case-control匹配的包(个人1 :N matching) in R (NOT propensity score matching)?

r - 在 R 中的分组数据帧中为每组分配递增索引

R:使用 igraph 有效地查找特殊大小的团

r - 根据具有相似名称的其他列改变变量