【发布时间】:2020-08-18 19:25:16
【问题描述】:
我的示例数据框如下所示:
structure(list(Speed = c("0-20", "21-40", "41-60", "61-80", "81-100"
), SpeedLevel = c(1, 2, 3, 4, 5)), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))
>
我需要添加一个列,其中包含与第一列“速度”相对应的范围内的所有值。 即,我需要在 '-' 处拆分字符串,并给出从 min 到 max 的值范围。
例如,在 Speed 列的第一行中,我们有“0-20”,因此在拆分后范围将是 0 到 20 之间的所有数字。一旦我得到了,我就可以使用 tidyr 的单独行或 unnest 函数和dplyr 分别如下面的预期输出所示。
预期输出:
structure(list(Speed = c("0-20", "0-20", "0-20", "0-20", "0-20",
"0-20", "0-20", "0-20", "0-20", "0-20", "0-20", "0-20", "0-20",
"0-20", "0-20", "0-20", "0-20", "0-20", "0-20", "0-20", "0-20",
"21-40", "21-40", "21-40", "21-40", "21-40", "21-40", "21-40",
"21-40", "21-40", "21-40", "21-40", "21-40", "21-40", "21-40",
"21-40", "21-40", "21-40", "21-40", "21-40", "21-40", "41-60",
"41-60", "41-60", "41-60", "41-60", "41-60", "41-60", "41-60",
"41-60", "41-60", "41-60", "41-60", "41-60", "41-60", "41-60",
"41-60", "41-60", "41-60", "41-60", "41-60", "61-80", "61-80",
"61-80", "61-80", "61-80", "61-80", "61-80", "61-80", "61-80",
"61-80", "61-80", "61-80", "61-80", "61-80", "61-80", "61-80",
"61-80", "61-80", "61-80", "61-80", "81-100", "81-100", "81-100",
"81-100", "81-100", "81-100", "81-100", "81-100", "81-100", "81-100",
"81-100", "81-100", "81-100", "81-100", "81-100", "81-100", "81-100",
"81-100", "81-100", "81-100"), SpeedLevel = c(1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5), ActualSpeed = c(0, 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, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 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, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
100)), row.names = c(NA, -101L), class = c("tbl_df", "tbl", "data.frame"
))
>
对于字符串拆分,我使用“strsplit”函数,但不确定我是否可以在这里使用它。有人可以告诉我如何拆分“速度”列并将两个结果数字用作范围值。
【问题讨论】: