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
我有这个 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