R 是否有一个函数来“引用”;评估“;字符串中的数字范围?

R 是否有一个函数来“引用”;评估“;字符串中的数字范围?,r,dplyr,R,Dplyr,我有一个“图例”,描述了一个数字可以进入的类别。我想在方法中使用某种类型的case\u将数字分类到这些类别中。有没有一种方法可以“评估”这些字符串中的数字范围,以便我可以相应地对数字进行排序 tribble(~n_treatment_category, ~level, "< 25", 1, "26 - 34", 2, "35 - 47", 3, "48 - 77", 4, "> 78 ", 5) tri

我有一个“图例”,描述了一个数字可以进入的类别。我想在方法中使用某种类型的
case\u将数字分类到这些类别中。有没有一种方法可以“评估”这些字符串中的数字范围,以便我可以相应地对数字进行排序

tribble(~n_treatment_category, ~level,
        "< 25", 1,
        "26 - 34", 2,
        "35 - 47", 3,
        "48 - 77", 4,
        "> 78 ", 5)
tribble(~n_治疗类,~level,
"< 25", 1,
"26 - 34", 2,
"35 - 47", 3,
"48 - 77", 4,
"> 78 ", 5)

您可以执行一些字符串操作来梳理边界,然后使用
findInterval

range <- gsub("[<> ]", "", dat$n_treatment_category)
range <- gsub("([0-9]+).*$", "\\1", range)
range <- sort(as.numeric(range))[-1] # don't need lowest number

set.seed(1)
numbers <- runif(10, 0, 100)

numbers
#> [1] 26.551 37.212 57.285 90.821 20.168 89.839 94.468 66.080 62.911  6.179

findInterval(numbers, c(0, range, Inf), right = FALSE)
#> [1] 2 3 4 5 1 5 5 4 4 1

range您可以执行一些字符串操作来梳理边界,然后使用
findInterval

range <- gsub("[<> ]", "", dat$n_treatment_category)
range <- gsub("([0-9]+).*$", "\\1", range)
range <- sort(as.numeric(range))[-1] # don't need lowest number

set.seed(1)
numbers <- runif(10, 0, 100)

numbers
#> [1] 26.551 37.212 57.285 90.821 20.168 89.839 94.468 66.080 62.911  6.179

findInterval(numbers, c(0, range, Inf), right = FALSE)
#> [1] 2 3 4 5 1 5 5 4 4 1

range假设
treatcat
是类别范围字符串的输入向量。请注意,问题中有一个错误,因为要使范围正确,不等式应为=。下面我们将<和>视为=

现在读取中的数字并使用指示的
cut
命令。如果希望改为使用整数类别,请在
cut
命令中使用
labels=FALSE
,或者省略标签以获得形式为(---,--)的标签

在这里,我们将数字分类为1:100,因此将其替换为您想要分类的任何数字

treatcat <- c("< 25", "26 - 34", "35 - 47", "48 - 77", "> 78 ") # test input

r <- na.omit(read.table(text = gsub("[<>-]", "", treatcat), fill = NA, header = FALSE))
cc <- cut(1:100, c(-Inf, r$V1 - 1, r$V2[nrow(r)], Inf), labels = treatcat)
cc
给予:

  [1] < 25    < 25    < 25    < 25    < 25    < 25    < 25    < 25    < 25   
 [10] < 25    < 25    < 25    < 25    < 25    < 25    < 25    < 25    < 25   
 [19] < 25    < 25    < 25    < 25    < 25    < 25    < 25    26 - 34 26 - 34
 [28] 26 - 34 26 - 34 26 - 34 26 - 34 26 - 34 26 - 34 26 - 34 35 - 47 35 - 47
 [37] 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47
 [46] 35 - 47 35 - 47 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77
 [55] 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77
 [64] 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77
 [73] 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 > 78    > 78    > 78    > 78   
 [82] > 78    > 78    > 78    > 78    > 78    > 78    > 78    > 78    > 78   
 [91] > 78    > 78    > 78    > 78    > 78    > 78    > 78    > 78    > 78   
[100] > 78   
Levels: < 25 26 - 34 35 - 47 48 - 77 > 78 
$`< 25`
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

$`26 - 34`
[1] 26 27 28 29 30 31 32 33 34

$`35 - 47`
 [1] 35 36 37 38 39 40 41 42 43 44 45 46 47

$`48 - 77`
 [1] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[26] 73 74 75 76 77

$`> 78 `
 [1]  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96
[20]  97  98  99 100
$`<25`
[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
$`26 - 34`
[1] 26 27 28 29 30 31 32 33 34
$`35 - 47`
[1] 35 36 37 38 39 40 41 42 43 44 45 46 47
$`48 - 77`
[1] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[26] 73 74 75 76 77
$`> 78 `
[1]  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96
[20]  97  98  99 100

假设
treatcat
是类别范围字符串的输入向量。请注意,问题中有一个错误,因为要更正范围,不等式应为=。下面我们将视为=

现在,请阅读中的数字并使用指示的
cut
命令。如果希望改为整数类别,请在
cut
命令中使用
labels=FALSE
,或者省略标签以获得形式(---,--)的标签

在这里,我们将数字分类为1:100,因此将其替换为您想要分类的任何数字

treatcat <- c("< 25", "26 - 34", "35 - 47", "48 - 77", "> 78 ") # test input

r <- na.omit(read.table(text = gsub("[<>-]", "", treatcat), fill = NA, header = FALSE))
cc <- cut(1:100, c(-Inf, r$V1 - 1, r$V2[nrow(r)], Inf), labels = treatcat)
cc
给予:

  [1] < 25    < 25    < 25    < 25    < 25    < 25    < 25    < 25    < 25   
 [10] < 25    < 25    < 25    < 25    < 25    < 25    < 25    < 25    < 25   
 [19] < 25    < 25    < 25    < 25    < 25    < 25    < 25    26 - 34 26 - 34
 [28] 26 - 34 26 - 34 26 - 34 26 - 34 26 - 34 26 - 34 26 - 34 35 - 47 35 - 47
 [37] 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47 35 - 47
 [46] 35 - 47 35 - 47 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77
 [55] 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77
 [64] 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77
 [73] 48 - 77 48 - 77 48 - 77 48 - 77 48 - 77 > 78    > 78    > 78    > 78   
 [82] > 78    > 78    > 78    > 78    > 78    > 78    > 78    > 78    > 78   
 [91] > 78    > 78    > 78    > 78    > 78    > 78    > 78    > 78    > 78   
[100] > 78   
Levels: < 25 26 - 34 35 - 47 48 - 77 > 78 
$`< 25`
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

$`26 - 34`
[1] 26 27 28 29 30 31 32 33 34

$`35 - 47`
 [1] 35 36 37 38 39 40 41 42 43 44 45 46 47

$`48 - 77`
 [1] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[26] 73 74 75 76 77

$`> 78 `
 [1]  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96
[20]  97  98  99 100
$`<25`
[1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
$`26 - 34`
[1] 26 27 28 29 30 31 32 33 34
$`35 - 47`
[1] 35 36 37 38 39 40 41 42 43 44 45 46 47
$`48 - 77`
[1] 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[26] 73 74 75 76 77
$`> 78 `
[1]  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96
[20]  97  98  99 100

我认为这个问题的答案在很大程度上取决于分组的格式。分组是否完全遵循您的模板:第一类为“y”,其他为“a-b”它们是按顺序排列的吗?或者可能会有所不同吗?我认为它们完全遵循这种格式。我认为关于这个问题的答案在很大程度上取决于小组给出的格式。它们是否完全遵循您的模板:第一类的形式是“y”,其他的形式是“a-b”它们是定做的?或者可能会有所不同?我认为它们完全遵循这种格式。