根据分组条件和字段条件选择行

时间:2017-11-16 13:08:15

标签: r select

我想知道如何选择这些地块,我将树木“HB”和“KU”放在一起?

这是我的数据集的一个示例:

       plot ID             tree
1    10000503711            LV
2  1000057448111            LV
3  1000057448111            HB
4  1000057448111            KU
5    10000603711            LV
6  1000063448111            TM
7  1000063448111            KS

所以结果应该是这样的(它不应该从我的数据集中删除其他树种,但它应该选择那些有“KU”和“HB”的地图ID-s):

   2  1000057448111            LV
   3  1000057448111            HB
   4  1000057448111            KU

请注意,某些图表中有多棵树在生长,每个图表会产生多行。有些地块只有一种树种。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

使用dplyr可以做到这一点。但也可以使用聚合。

编辑:使用新数据集来处理包含HB和KU的测试用例。

options(scipen = 50)
library(dplyr)
ss <- read.table(text = "       plot ID             tree
                 1    10000503711            LV
                 2  1000057448111            LV
                 3  1000057448111            HB
                 4  1000057448111            KU
                 5    10000603711            LV
                 5    10000603711            HB
                 6  1000063448111            TM
                 7  1000063448111            KS", header = T)


ss %>% 
  group_by(ID) %>% 
  mutate(trees = paste0(tree, collapse = "_")) %>%
  filter(grepl('HB_KU|KU_HB',trees)) %>%  distinct(ID) %>% 
  inner_join(.,ss)

输出:

Joining, by = "ID"
# A tibble: 3 x 3
# Groups:   ID [?]
             ID  plot   tree
          <dbl> <int> <fctr>
1 1000057448111     2     LV
2 1000057448111     3     HB
3 1000057448111     4     KU

答案 1 :(得分:2)

这是一个基本解决方案。

for($i=0;$i<count($array);$i++){
    unset($array[$i]['read_status']);
}