我有一个带有连续数字变量的数据框,年龄以月为单位(age_mnths).我想创建一个新的离散变量,基于年龄间隔的年龄类别.
# Some example data
rota2 <- data.frame(age_mnth = 1:170)
Run Code Online (Sandbox Code Playgroud)
我已经创建了ifelse基于程序(下面),但我相信有可能有更优雅的解决方案.
rota2$age_gr<-ifelse(rota2$age_mnth < 6, rr2 <- "0-5 mnths",
ifelse(rota2$age_mnth > 5 & rota2$age_mnth < 12, rr2 <- "6-11 mnths",
ifelse(rota2$age_mnth > 11 & rota2$age_mnth < 24, rr2 <- "12-23 mnths",
ifelse(rota2$age_mnth > 23 & rota2$age_mnth < 60, rr2 <- "24-59 mnths",
ifelse(rota2$age_mnth > 59 & rota2$age_mnth < 167, rr2 <- "5-14 yrs",
rr2 <- "adult")))))
Run Code Online (Sandbox Code Playgroud)
我知道有cut功能,但我无法处理它,以便我进行离散化/分类.
在遇到另一个问题后我正在思考这个问题。
library(tidyverse)
set.seed(42)
df <- data.frame(x = cut(runif(100), c(0,25,75,125,175,225,299)))
Run Code Online (Sandbox Code Playgroud)
tidyr::extract很好地分割成由正则表达式定义的组:
df %>%
extract(x, c("start", "end"), "(\\d+),(\\d+)") %>% head
#> start end
#> 1 0 25
#> 2 0 25
#> 3 0 25
#> 4 0 25
#> 5 0 25
#> 6 0 25
Run Code Online (Sandbox Code Playgroud)
字符向量上的所需输出。我知道你可以创建一个新函数,我想知道这是否已经存在。
x_chr <- as.character(df$x)
des_res <- str_split(str_extract(x_chr, "(\\d+),(\\d+)"), ",")
head(des_res)
#> [[1]]
#> [1] "0" "25"
#>
#> [[2]]
#> [1] "0" "25"
#>
#> [[3]]
#> [1] "0" "25"
#>
#> …Run Code Online (Sandbox Code Playgroud)