首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有条件地将多个列重新记录为一个具有Dplyr变异和If_Else的新列

有条件地将多个列重新记录为一个具有Dplyr变异和If_Else的新列
EN

Stack Overflow用户
提问于 2016-10-26 05:15:58
回答 1查看 923关注 0票数 3

使用下面的简单数据,我打算创建一个新列,其中包含一个1表示城市=“多伦多”和PostInjury = "0-1“的实例,2用于City=”蒙特利尔“和PostInjury ="6-10”的实例,还有一个3代表其他所有的实例。

我想使用mutate和if_else,但不确定如何使用这个组合有条件地将多个列组合重新编码成一个新列,而不需要中间步骤?我可以使用两个if_else语句来创建两个新列,然后将它们与Tidyr的unite组合起来,但这似乎非常乏味。

我错过了什么优雅的东西吗?我有种感觉是否有一种在dplyr中以这种方式使用if_else的方法,或者使用case_when的方法?

代码语言:javascript
运行
复制
 City<-c("Toronto", "Toronto", "Montreal","Ottawa","Montreal",
    "Hamilton","Peterborough","Toronto","Hamilton","Montreal")

 Client<-c("Cl1","Cl2","Cl3","Cl4","Cl5","Cl6","Cl7","Cl8","Cl9","Cl10")

 PostInjury<-c("0-1","6-10","0-1","2-5","6-10","0-1","11-15","0-1","0-1","6-10")

DF<- data.frame(City,Client,PostInjury)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-26 05:31:15

您可以使用嵌套的ifelse。用dplyr

代码语言:javascript
运行
复制
DF <- DF %>% 
  mutate(new_column = if_else(City == "Toronto" & PostInjury == "0-1", 1,
    if_else(City == "Montreal" & PostInjury == "6-10", 2, 3)))

使用case_when

代码语言:javascript
运行
复制
DF <- DF %>% mutate(new_column = 
  case_when(
      City == "Toronto" & PostInjury == "0-1" ~ 1,
      City == "Montreal" & PostInjury == "6-10" ~ 2, 
      TRUE ~ 3
  )
)

或者使用base函数:

代码语言:javascript
运行
复制
DF$new_column <- ifelse(DF$City == "Toronto" & DF$PostInjury == "0-1", 1,
  ifelse(DF$City == "Montreal" & DF$PostInjury == "6-10", 2, 3))

代码语言:javascript
运行
复制
DF$new_column <- sapply(as.character(interaction(DF$City, DF$PostInjury)),
  switch, 
  "Toronto.0-1" = 1,
  "Montreal.6-10" = 2,
  3)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40254229

复制
相关文章

相似问题

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