df1=data.frame(age=c(60,20,65,25), sex=c("m","f","f","m"))
条件:ifelse(age>30,old,yun).
形成df2=data.frame(age=c(60,20,65,25), sex=c("m","f","f","m"),id=c("oldm","yunf","oldf","yunm"))
有什么方法能够替代ifelse嵌套
- 已编辑
df1$id <- ifelse(df1$age > 30, "old", "yun")
df2 <- transform(df1, id = paste(id, sex, sep = ""))
df1$id <- paste0(ifelse(df1$age > 30, "old", "yun"), df1$sex)
7 天 后
library(dplyr)
library(magrittr)
df1=data.frame(age=c(60,20,65,25), sex=c("m","f","f","m"))
df2=df1 %>% mutate(sex = case_when(age > 30 ~ paste0('old',sex),
TRUE ~ paste0('yun',sex)))
14 天 后
- 已编辑
看到标题就想到了cut()函数,然后再用tidyr中的unite() 函数:
df1 %>%
mutate(young_or_old = cut(age, breaks = c(0, 30, Inf), c("young", "old"))) %>%
unite(sex,young_or_old,col = "id2", sep = "_", remove = FALSE)
前两个答案,代码很优雅,无奈没有好好审题,说好的是要替代ifelse的,