首页 > 解决方案 > 基于组不变列值的条件分组

问题描述

我有一个数据框:

temp = as.data.frame(matrix(c(1,2,2,-3,1,1,2,3,-2,0,2,1,-5,1,1,2,1,3,0,0,3,2,4,-1,1,3,2,2,0,1,3,2,4,3,0), ncol=5,byrow = TRUE))
colnames(temp) = c("ID","srch","utility","reutility","code")

我需要按“ID”列分组。对于任何“ID”值,“srch”列保持不变。对于每个组,如果 srch > 1 我需要 min(utility where code==1)-max(reutility where code ==0) else (即如果 srch<=1) 我需要它为 0。

这是我需要的输出:

temp = as.data.frame(matrix(c(1,4,2,0,3,-1), ncol=2,byrow = TRUE))
colnames(temp)=c("ID","Val")

任何使用 dplyr 的代码都很棒,但也欢迎其他代码。

标签: rdplyrgrouping

解决方案


假设输出为ID = 20,我们可以这样做:

library(dplyr)

temp %>%
  group_by(ID) %>%
  summarise(Val = if(first(srch) > 1) min(utility[code == 1]) - 
                                      max(reutility[code == 0]) else 0)

# A tibble: 3 x 2
#     ID   Val
#  <dbl> <dbl>
#1     1     4
#2     2     0
#3     3    -1

推荐阅读