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”它们是定做的?或者可能会有所不同?我认为它们完全遵循这种格式。