r - 基于组不变列值的条件分组
问题描述
我有一个数据框:
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 的代码都很棒,但也欢迎其他代码。
解决方案
假设输出为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
推荐阅读
- r - 如何检查 CUDA GPU 在 R 中是否可用?
- c# - LINQ .Where .Max 和写入文件
- reactjs - 尝试使用我的反应应用程序上的编辑按钮编辑我的服务器上的数据
- ruby - Ruby gem 无法找到它显示的事件,该 gem 已安装
- c++ - 将无效值打印到其他无效
- javascript - Flex-Direction Column Reverse 工作,但需要它不自动滚动到底部
- windows - 使用重命名功能修改文件名的多个部分?
- c# - 如何为 DevExtreme MasterDetail DataGrid 设置 DataSource,它对 Master 和 Detail 使用相同的 DataSource?
- pine-script - 一种基于 2 个参数关闭策略的方法
- java - 索引 0 越界