【问题标题】:Subseting dataframe with repeated observations based on conditions [duplicate]基于条件重复观察的子集数据框[重复]
【发布时间】:2020-05-20 20:47:45
【问题描述】:

这是我的数据框的示例:

ID <- rep(c(1, 2,3), each = 4)
value <-  rep(c(3,3,1,1,4,4,4,4,6,6,9,9))
Group <-  rep(c("Group 1","Group 2", "Group 2","Group 2","Group 1", "Group 2"), each =2 )
data <- data.frame(ID, Group,value)
data
#>    ID   Group value
#> 1   1 Group 1     3
#> 2   1 Group 1     3
#> 3   1 Group 2     1
#> 4   1 Group 2     1
#> 5   2 Group 2     4
#> 6   2 Group 2     4
#> 7   2 Group 2     4
#> 8   2 Group 2     4
#> 9   3 Group 1     6
#> 10  3 Group 1     6
#> 11  3 Group 2     9
#> 12  3 Group 2     9

在第 1 组和第 2 组中有一些重复的 ID(例如 ID 1 和 3 )。此外,只有一个组中有一些 ID,组 1 或组 2(例如 ID 2)。我想根据“组”列(第 1 组或第 2 组)对数据框进行子集化,以“值”列(最小值)为条件,以便考虑所有 ID(即使只有一组中的 ID)。我期望的输出是这样的:

    ID <- rep(c(1,1,2,2,2,2,3,3))
    value <-  rep(c(1,1,4,4,4,4,6,6))
    Group <-  rep(c("Group 2","Group 2","Group 2","Group 2","Group 2","Group 2","Group 1","Group 1"))
    data <- data.frame(ID, Group,value)
    data
#>   ID   Group value
#> 1  1 Group 2     1
#> 2  1 Group 2     1
#> 3  2 Group 2     4
#> 4  2 Group 2     4
#> 5  2 Group 2     4
#> 6  2 Group 2     4
#> 7  3 Group 1     6
#> 8  3 Group 1     6

因此,子集之前的不同 ID 的数量必须与子集之后的不同 ID 的数量相同。唯一会改变的是行数会减少

如果我没有足够清楚地说明问题,请随时提问,我会尝试更清楚地解释! 提前谢谢大家!

【问题讨论】:

    标签: r dplyr subset


    【解决方案1】:

    我们可以按'ID'和filter分组'value'为minimum的行

    library(dplyr)
    data %>%
          group_by(ID) %>%
          filter(value == min(value))
    # A tibble: 8 x 3
    # Groups:   ID [3]
    #     ID Group   value
    #  <dbl> <chr>   <dbl>
    #1     1 Group 2     1
    #2     1 Group 2     1
    #3     2 Group 2     4
    #4     2 Group 2     4
    #5     2 Group 2     4
    #6     2 Group 2     4
    #7     3 Group 1     6
    #8     3 Group 1     6
    

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2016-09-09
      相关资源
      最近更新 更多