【问题标题】:How to divide between groups of rows using dplyr如何使用 dplyr 在行组之间进行划分
【发布时间】:2020-07-20 07:52:38
【问题描述】:

我有类似的数据,我想要此链接所述的确切结果: How to divide between groups of rows using dplyr?

但是,与我的数据唯一不同的是,有时“条件”列并不总是有“A”或“B”,所以有时没有分母或分子。

x <- data.frame(
    name = rep(letters[1:4], each = 2),
    condition = rep(c("A", "B"), times = 4),
    value = c(2,10,4,20,8,40,20,100)
) 
x = x[-c(4,5),] #this is my dataframe

我想删除并非总是同时包含 A 和 B 的行并继续除法。谁能根据这段代码告诉我如何做到这一点?

x %>% 
  group_by(name) %>%
  summarise(value = value[condition == "B"] / value[condition == "A"])

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以使用data.table

    library(data.table)
    setDT(x)[all(c('A', 'B') %chin% condition), 
        .(value = value[condition == 'B']/value[condition == 'A']), name]
    

    【讨论】:

      【解决方案2】:

      您可以删除没有“A”或“B”的组,然后划分。

      library(dplyr)
      
      x %>%
        group_by(name) %>%
        filter(all(c('A', 'B') %in% condition)) %>%
        summarise(value = value[condition == "B"] / value[condition == "A"])
      
      #  name  value
      #  <fct> <dbl>
      #1 a         5
      #2 d         5
      

      【讨论】:

        猜你喜欢
        • 2016-09-23
        • 2019-10-16
        • 1970-01-01
        • 2018-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-09
        • 1970-01-01
        相关资源
        最近更新 更多