【问题标题】:R: subsetting all observations of individuals that have one matched observationR:对具有一个匹配观察的个体的所有观察进行子集化
【发布时间】:2017-01-12 06:14:21
【问题描述】:

抱歉,又问了一个该死的子集问题;我只是找不到描述的这种情况,尽管它一定很常见。汇总后的数据如下所示:

Plot     Year  BA
A        1980  44
A        1990  54
A        2000  66
B        1980  58
B        1990  69
B        2000  80

我想要对 1980 年 BA subset(Df, BA<50 & Year==1980),但无法确定下一级索引。

如果有人有更好的方式来表达标题,我会改变它。我能想到的所有搜索方式都只出现了 &/|问题。 (这么多 &/| 问题...)

【问题讨论】:

    标签: r indexing subset


    【解决方案1】:

    我们可以使用data.table

    library(data.table)
    setDT(df1)[, if(all(BA[Year == 1980] < 50)) .SD, by = Plot]
    #   Plot Year BA
    #1:    A 1980 44
    #2:    A 1990 54
    #3:    A 2000 66
    

    【讨论】:

      【解决方案2】:

      Plot上索引你的条件,用%in%检查成员资格,以防真实数据中有多个Plot满足条件。

      subset(df, Plot %in% unique(Plot[BA < 50 & Year == 1980]))
      #   Plot Year BA
      # 1    A 1980 44
      # 2    A 1990 54
      # 3    A 2000 66
      

      或使用标准评估 [ 子集,

      df[with(df, Plot %in% unique(Plot[BA < 50 & Year == 1980])), ]
      #   Plot Year BA
      # 1    A 1980 44
      # 2    A 1990 54
      # 3    A 2000 66
      

      【讨论】:

      • 绘制 %in%!!我试过你的第一个例子,除了那个关键的部分。非常感谢您提供了子集()和[]-我也希望看到子集的危险讨论。 @Psidom 我更喜欢 dplyr 语法——但那是为了 after 我了解常规索引。
      • @uhClem - 我进行了编辑,添加了unique,我认为当我们在同一组中有不止一场比赛时会更有效率。
      【解决方案3】:

      dplyr 的另一个选项,这假设每个图只有一个等于 1980 的记录,否则您可能需要根据您所需的逻辑使用 all()any() 包装条件:

      library(dplyr)
      df %>% group_by(Plot) %>% filter(BA[Year == 1980] < 50)
      
      # Source: local data frame [3 x 3]
      # Groups: Plot [1]
      
      #     Plot  Year    BA
      #   <fctr> <int> <int>
      # 1      A  1980    44
      # 2      A  1990    54
      # 3      A  2000    66
      

      在某些地块存在多个 1980 的情况下,@DirtySockSniffer 的答案的逻辑相当于dplyr 中的df %&gt;% group_by(Plot) %&gt;% filter(any(BA[Year == 1980] &lt; 50))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 2019-06-15
        • 2012-11-26
        相关资源
        最近更新 更多