【问题标题】:R: Subset a dataframe based on group and different conditionsR:根据组和不同条件对数据框进行子集
【发布时间】:2026-02-15 12:25:01
【问题描述】:

考虑一个数据框:

data = data.frame(a=c(1,1,1,2,2,3),
              b=c("apples", "oranges", "apples", "apples", "apples", "oranges"),
              c=c(12, 22, 22, 45, 67, 28), 
              d=c("Monday", "Monday", "Monday", "Tuesday", "Wednesday", "Tuesday"),
              out = c(12, 14, 16, 18, 20, 22),
              rate = c(-0.01, -0.02, 0.03, -0.04, 0.07, 0.06))

我想对数据框进行子集化,以在水果为苹果时为负数而在水果为橙色时为正数时保留值。即我想要的输出是

data = data.frame(a=c(1,2,3),
              b=c("apples", "apples", "oranges"),
              c=c(12, 45, 28), 
              d=c("Monday", "Tuesday", "Tuesday"),
              out = c(12, 18, 22),
              rate = c(-0.01, -0.04, 0.06))

有办法吗?

【问题讨论】:

    标签: r dplyr subset


    【解决方案1】:

    这是dplyr 解决方案:

    library(dplyr)
    data %>% 
      filter((b == "apples" & rate < 0) | (b == "oranges" & rate > 0))
    
      a       b  c       d out  rate
    1 1  apples 12  Monday  12 -0.01
    2 2  apples 45 Tuesday  18 -0.04
    3 3 oranges 28 Tuesday  22  0.06
    

    【讨论】:

      【解决方案2】:

      我不知道如何处理dplyr。但是,您可以使用 subset 轻松做到这一点

      data = data.frame(a=c(1,1,1,2,2,3),
                    b=c("apples", "oranges", "apples", "apples", "apples", "oranges"),
                    c=c(12, 22, 22, 45, 67, 28), 
                    d=c("Monday", "Monday", "Monday", "Tuesday", "Wednesday", "Tuesday"),
                    out = c(12, 14, 16, 18, 20, 22),
                    rate = c(-0.01, -0.02, 0.03, -0.04, 0.07, 0.06))
      
      subData <- subset(data, (b == "apples" & rate < 0) | (b == "oranges" & rate > 0))
      

      代码很简单。它子集data 寻找您的两个约束。在这段代码中,&amp; 代表and,而| 代表or

      【讨论】:

        最近更新 更多