[英]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
中使用多個條件,您可以將cut
與labels
一起使用。
由於您沒有提供示例,我將使用默認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.