R:过滤数据框的优雅方式,以便考虑一组变量的前几个小数

R: Elegant Way to Filter Dataframe Such that First Few Decimals of a Set of Variables Are Considered

我有这个 toy data,我只想获取 v2 变量 and 中具有 0.5 的行 0.3 v3变量。

我试过这个:

library(tidyverse)
toy_data <- tibble(v1 = c(20215, 20549, 21678, 20562, 20245, 20225, 21245, 22322, 20618, 21993, 22394, 21581), v2 = c(0.612, 0.618, 0.642, 0.618, 0.612, 0.593, 0.659, 0.619, 0.651, 0.662, 0.640, 0.509), v3 = c(0.533, 0.567, 0.469, 0.545, 0.675, 0.399, 0.322, 0.543, 0.576, 0.457, 0.552, 0.390), v4 = c(49, 118, 257, 384, 566, 569, 637, 1028, 1253, 2277, 2300, 2390), v5 = rep(NA, 12))
toy_data |> filter(v2 >= 0.5, v3 >= 0.3) |> filter(v2 < 0.6, v3 < 0.4)

## A tibble: 2 x 5
#     v1    v2    v3    v4 v5   
#  <dbl> <dbl> <dbl> <dbl> <lgl>
#1 20225 0.593 0.399   569 NA   
#2 21581 0.509 0.39   2390 NA 

.

我想要的

有没有一种优雅的方法来做到这一点,不一定要通过 tidyversr::filter() 这样我就可以告诉 R 在变量 v2 和 [=16 中寻找 0.5 =] 在变量 v3 中像这样:

toy_data |> substr(toy_data$v2, 1, 3) %in% 0.5 & substr(toy_data$v3, 1, 3) %in% 0.3

你可以乘以 10 并使用 floor:

toy_data |> filter(floor(10 * v2) == 5 & floor(10 * v3) == 3)
#> # A tibble: 2 x 5
#>      v1    v2    v3    v4 v5   
#>   <dbl> <dbl> <dbl> <dbl> <lgl>
#> 1 20225 0.593 0.399   569 NA   
#> 2 21581 0.509 0.39   2390 NA