首页 > 解决方案 > 将数值向量切割成区间,但仅将每个元素的下边界作为数值向量返回

问题描述

将数值向量切割成区间,但仅将每个元素的下边界作为数值向量返回

下面是我的尝试。它有效,但我正在寻找一个不那么老套和更通用的解决方案。我更喜欢依赖数学而不是函数的解决方案。

library(tidyverse)
x = 1943:2023
y = cut(x, seq(1943, 2023, 5), include.lowest = TRUE, right = FALSE) |> as.character() |> str_sub(2, 5) |> as.numeric()
tibble(x, y) |> print(n=15)
#> # A tibble: 81 x 2
#>        x     y
#>    <int> <dbl>
#>  1  1943  1943
#>  2  1944  1943
#>  3  1945  1943
#>  4  1946  1943
#>  5  1947  1943
#>  6  1948  1948
#>  7  1949  1948
#>  8  1950  1948
#>  9  1951  1948
#> 10  1952  1948
#> 11  1953  1953
#> 12  1954  1953
#> 13  1955  1953
#> 14  1956  1953
#> 15  1957  1953
#> # ... with 66 more rows

任何帮助表示赞赏!

标签: r

解决方案


你可以这样做:

breaks <- seq(1943, 2023, 5)
breaks[findInterval(x, breaks, rightmost.closed = TRUE)]

[1] 1943 1943 1943 1943 1943 1948 1948 1948 1948 1948 1953 1953 1953 1953 1953 1958 1958 1958 1958 1958 1963 1963 1963 1963 1963 1968 1968 1968 1968 1968 1973 1973 1973 1973 1973 1978 1978 1978 1978 1978 1983 1983 1983 1983 1983
[46] 1988 1988 1988 1988 1988 1993 1993 1993 1993 1993 1998 1998 1998 1998 1998 2003 2003 2003 2003 2003 2008 2008 2008 2008 2008 2013 2013 2013 2013 2013 2018 2018 2018 2018 2018 2018

对于间隔均匀分布的数学方法,您可以执行以下操作:

min(x) + (x - min(x)) %/% 5 * 5

但是根据所需的边界需要额外的逻辑。


推荐阅读