【问题标题】:Extract subset data based on four conditions/coordinate ranges in R基于R中的四个条件/坐标范围提取子集数据
【发布时间】:2020-11-17 20:43:01
【问题描述】:

我有一个长表(版本 1),我想根据 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) 范围内的所有列和行。

提前致谢!

【问题讨论】:

  • 抱歉,我编辑了我的问题!我希望将上述范围内的所有数据集作为输出。
  • 您的编辑显示 -85 and 30 (V16) as well as 25 and 75 (V17) 这些将是单独的数据集吗?
  • 不,V16 有纬度,V17 有经度,所以输出应该满足 V16 和 V17 的范围。最后根据这两个范围过滤的一个数据集
  • 如果是filter 那么为什么需要group_splitversion1 %&gt;% filter(V16&gt;-85 &amp; V16&lt;30 &amp; V17&gt;25 &amp; V17&lt;75)
  • 我使用分组拆分来分别存储每个数据集,因为我还想保留以 0...9 开头的单个 V3 组,直到下一批 0...5 出现在数据。

标签: r dplyr group-by conditional-statements


【解决方案1】:

我们这里可能需要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)

【讨论】:

  • 谢谢!过滤器与 group_split 的组合正是我所需要的。
猜你喜欢
  • 2019-06-01
  • 2016-10-04
  • 1970-01-01
  • 2019-10-22
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多