r - 将数值向量切割成区间,但仅将每个元素的下边界作为数值向量返回
问题描述
将数值向量切割成区间,但仅将每个元素的下边界作为数值向量返回
下面是我的尝试。它有效,但我正在寻找一个不那么老套和更通用的解决方案。我更喜欢依赖数学而不是函数的解决方案。
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
任何帮助表示赞赏!
解决方案
你可以这样做:
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
但是根据所需的边界需要额外的逻辑。
推荐阅读
- android - 在 Android 项目中使用 StateFlow
- php - 如何在 FreeBSD 上设置 PHP 语言环境?
- amazon-s3 - 如何将 S3 中的 DynamoJSON 数据读取到 Athena
- validation - 如何防止经过身份验证的用户通过 POSTMAN 发送类似请求?
- node.js - 如何在中间件中获取域,然后在 axios 调用 [Nuxt] 之前将其传递给组件/存储
- css - 如何使用 AWS SES 电子邮件模板添加背景图像
- javascript - 如何使用 ajax 加载背景图片 url?
- python - 如何使用pywin32获取outlook默认文件夹以外的文件夹
- c# - 使用 .NET core 使用 Nunit 和 SpecFlow 生成结果报告测试
- powershell - 在运行脚本之前请求计算机名称