首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新变量的If Else语句

新变量的If Else语句
EN

Stack Overflow用户
提问于 2019-06-03 19:09:08
回答 3查看 233关注 0票数 0

我想把月份编码成季度,并为其使用一行代码。我在为财政季度编码。月4-6是1,月7-9是季2,月10-12是季3,月1-3是季4。

我尝试过ifelse语句,但是它给了我第一部分的错误。

代码语言:javascript
复制
ACLED$quarter<- ifelse(ACLED$month==4 & ACLED$month==5 & ACLED$month==6, 1)

如果== 4和== $ == 5和ACLED$== 6中出现错误,参数" no“缺失,没有默认值

我该怎么解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-03 19:30:09

如果您使用dplyr包和case_when函数,那么很容易:

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

   foo <- sample(1:12, 100, replace = TRUE)

   qtr <- case_when(foo %in% 4:6 ~ 1,
             foo %in% 7:9 ~ 2,
             foo %in% 10:12 ~ 3,
             foo %in% 1:3 ~ 4)
票数 1
EN

Stack Overflow用户

发布于 2019-06-03 19:29:31

这是直接与dplyr的case_when。不过,我不确定它是否满足了您“一行代码”的需求。

代码语言:javascript
复制
month <- c(1,2,3,4,5,6,7,8,9,10,11,12)

df <- data.frame(month = month)

df2 <- 
  df %>% 
  mutate(Quarter = case_when(
    #Quarter 1.
    month  %in% c(1,2,3) ~ 
      "First", 
    #Quarter 2.
    month  %in% c(4,5,6) ~ 
      "Second", 
    #Quarter 3.
    month  %in% c(7,8,9) ~
      "Third", 
    #Quarter 4.
    month  %in% c(10,11,12) ~ 
      "Fourth")
  )
票数 0
EN

Stack Overflow用户

发布于 2019-06-03 19:43:29

我将倡导您已经收到的更优雅的case_when解决方案。但是,ifelse也可以使用与markhogue (+1)的答案相同的逻辑的多个ifelse函数来完成这项工作。请参阅关于ifelse的文档;当标准不匹配时,它需要知道该做什么--在本例中,使用另一个ifelse和一个是NA的情况下有三次。第一个参数是匹配条件(如果),第二个参数是如果条件匹配(get),第二个参数是如果条件不匹配怎么办(否则)。

代码语言:javascript
复制
set.seed(1)

df<-data.frame('mon' = sample(1:12, replace = T, size = 20))

df[,'qtr'] <- 
  ifelse(df[,'mon'] >=  1 & df[,'mon'] <=  3, 4, 
  ifelse(df[,'mon'] >=  4 & df[,'mon'] <=  6, 1, 
  ifelse(df[,'mon'] >=  7 & df[,'mon'] <=  9, 2,
  ifelse(df[,'mon'] >= 10 & df[,'mon'] <= 12, 3,  NA))))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56433237

复制
相关文章

相似问题

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