相关疑难解决方法(0)

将连续数值转换为由间隔定义的离散类别

我有一个带有连续数字变量的数据框,年龄以月为单位(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功能,但我无法处理它,以便我进行离散化/分类.

r r-faq

21
推荐指数
2
解决办法
4万
查看次数

是否有字符向量的 tidyr::extract 等效项?

在遇到另一个问题后我正在思考这个问题。

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)

r

3
推荐指数
1
解决办法
111
查看次数

标签 统计

r ×2

r-faq ×1