基于组不变列值的条件分组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于组不变列值的条件分组相关的知识,希望对你有一定的参考价值。
我有一个数据框:
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,其中code == 1)-max(reutility,其中code == 0)否则(例如,如果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的任何代码都很棒,但也欢迎使用其他代码。
答案
假设ID = 2
的输出为0,我们可以这样做:
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
另一答案
您可以做:
temp %>%
group_by(ID) %>%
mutate(
Val = case_when(
srch > 1 ~ min(utility[code == 1]) - max(reutility[code == 0]),
srch <= 1 ~ min(utility[code == 1])
)
) %>% distinct(ID, Val)
输出:
# A tibble: 3 x 2
# Groups: ID [3]
ID Val
<dbl> <dbl>
1 1 4
2 2 -5
3 3 -1
以上是关于基于组不变列值的条件分组的主要内容,如果未能解决你的问题,请参考以下文章