r - 基于R中的四个条件/坐标范围提取子集数据
问题描述
我有一个长表(version1),我想根据 V16 和 V17 中的四个条件从中提取子集数据。它们被定义为我找到数据的范围(坐标)。提取后,我想将新子集保存为单独的组或数据框。所有其他列也应保留在其中。但是,我正在努力设定条件。这是我到目前为止得到的:
df_NA <- data.frame(version1) %>%
mutate(Groups = ifelse(V16>-85 & V16<30 & V17>25 & V17<75, 1, 0),
Groups = cumsum(Groups)) %>%
group_split(Groups)
是否可以用 ifelse 做到这一点?
示例数据:
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 Groups
<int> <int> <int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <int> <int> <int> <int> <dbl> <dbl> <int> <dbl>
1 43 1 0 69 60 9 19501201 1080 0 1 641 30 0 0 0 136 29 3650 0
2 43 1 1 69 60 9 19501201 884 0 1 705 30 3 0 0 136 29 3650 0
3 43 1 2 70 61 9 19501201 553 293 1 1090 30 6 0 0 138 31 3650 0
4 43 1 3 71 62 9 19501201 416 290 1 1240 30 9 0 0 140 33 3650 0
5 43 1 4 72 63 9 19501201 396 287 1 1160 30 12 0 0 142 35 3650 0
6 43 1 5 73 64 9 19501201 163 285 1 1440 30 15 0 0 144 37 3650 0
7 43 1 6 74 66 9 19501201 29 475 1 1490 30 18 0 0 146 41 3650 0
8 43 1 7 74 67 9 19501201 -257 222 1 1960 30 21 0 0 146 43 3650 0
9 43 1 8 74 68 9 19501202 -216 222 1 1850 30 0 0 0 146 45 3650 0
10 43 1 9 74 69 9 19501202 -393 222 1 1950 30 3 0 0 146 47 3650 0
我想保留-85和30(V16)以及25和75(V17)范围内的所有列和行。
提前致谢!
解决方案
我们可能需要在filter
这里
library(dplyr)
version1 %>%
filter(between(V16, -85, 30), between(V17, 25, 75))
如果我们需要根据“V3”列进行拆分
version1 %>%
filter(between(V16, -85, 30), between(V17, 25, 75)) %>%
group_split(group = cumsum(V3 == 0))
或subset
从base R
subset(version1, V16>-85 & V16<30 & V17>25 & V17<75)
推荐阅读
- javascript - 如何“Alt+向左箭头”木偶页面.keyboard
- android - 约束布局中的条件定位
- google-apps-script - 如何在 Google 测验中添加正确答案的多项选择题
- c# - 内容验证错误预期类型:数组
- snowflake-cloud-data-platform - Snowflake 如何进行瞬时调整大小?
- sql-server - 如何使用 pyodbc 将 CONTAINSTABLE 参数化查询传递给 SQL Server,条件是包含术语“AND”-ed 一起?
- laravel - Laravel Swagger PHP 找不到常量数组
- r - 如何命名行
- rust - 合并排序代码未在 rust 中提供所需的输出
- django - 在 AJAX 调用中使用 CSRF 会导致 Uncaught TypeError: Cannot read property 'value' of null