簡體   English   中英

使用 case_when i r dplyr 與 OR

[英]Using case_when i r dplyr with OR

我的數據中有這個專欄:

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 output

而不是在case_when中使用多個條件,您可以將cutlabels一起使用。

由於您沒有提供示例,我將使用默認mtcars數據集的mpg列。

mtcars$mpg
#[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3
#[14] 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3
#[27] 26.0 30.4 15.8 19.7 15.0 21.4

您可以定義要在其中划分數據的breaks並從中構造labels

breaks <- c(0, 15, 20, 25, 50)
labels <- paste(head(breaks, -1), tail(breaks, -1), sep = "-")
cut(mtcars$mpg, breaks, labels)

#[1] 20-25 20-25 20-25 20-25 15-20 15-20 0-15  20-25 20-25 15-20 15-20
#[12] 15-20 15-20 15-20 0-15  0-15  0-15  25-50 25-50 25-50 20-25 15-20
#[23] 15-20 0-15  15-20 25-50 25-50 25-50 15-20 15-20 0-15  20-25
#Levels: 0-15 15-20 20-25 25-50

當您的數據中有大量年份並且為每個年份編寫條件可能很乏味時,這將很有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM