r - 基于多个条件的子集数据
问题描述
我的 df 看起来像这样:
dfin <-
ID DAY SIZE
1 -5 10
1 -2 15
1 0 10
1 1 20
2 5 20
3 -5 2
3 -4 10
3 1 15
我想对DAY
行进行子集处理:如果DAY
某个主题的值在值中具有值 0(基线),DAY
则该主题的子集数据 DAY >= 0。如果某个主题的值以负数开头(并且没有 0 基线),则从最适合该主题的负数DAY
到正数的子集。DAY
如果DAY
某个主题的值以正数(没有负数DAY
)开头,则保留该主题的所有行。
输出应该是这样的:
dfout <-
ID DAY SIZE
1 0 10
1 1 20
2 5 20
3 -4 10
3 1 15
我正在使用 RStudio。如果可能(选项 1)或 dplyr(选项 2),使用 data.table 的首选解决方案。
解决方案
也许是这样的:
library(data.table)
setDT(dfin)[,
if(any(DAY==0)) .SD[DAY>=0]
else if (DAY[1L] < 0) .SD[last(which(DAY < 0)):.N]
else .SD,
ID]
输出:
ID DAY SIZE
1: 1 0 10
2: 1 1 20
3: 2 5 20
4: 3 -4 10
5: 3 1 15
数据:
library(data.table)
dfin <- fread("ID DAY SIZE
1 -5 10
1 -2 15
1 0 10
1 1 20
2 5 20
3 -5 2
3 -4 10
3 1 15")
推荐阅读
- java - Powermock:如何在枚举常量中模拟方法
- ios - 动态字体类型的辅助功能检查器警告
- python - 连接两个具有不同索引和不同形状的元组
- python - 如果在 Scrapy 中遇到某些情况,如何摆脱爬网
- java - 调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException:不是托管类型:
- postgresql - Postgres中的加权中位数计算
- javascript - 如何在反应中发送到其他组件onChange选择
- xamarin.forms - 如何使用 Xamarin.ios 在 IOS 中运行后台任务
- powershell - 搜索注册表并创建新项目
- javascript - 如何在nodejs 11中控制台记录大对象