事件发生后从分组数据中删除行

乔诺·伯恩(Jonno Bourne)

我有一个包含ID,日期和事件的数据集。事件是二进制结果变量。每个ID最多只能有一个事件。该事件后可能有多个0。我想按组删除事件后出现的所有零。我在下面有一个使用dplyr的解决方案,但很想知道是否有更好的方法。指示某个事件在过去某个时间点发生过的好的方法是什么?

library(dplyr)
d <-as.Date("01-05-15", "%d-%m-%y")
#Starting dataset
df <- data.frame(ID= c(rep(234,4),rep(235,6), rep(237,5)), 
       date = as.Date(c((d-4):(d-1),(d-1):(d+4),(d+1):(d+5)),origin="1960-10-01"),
       event = c(0,1,0,0,0,0,0,0,0,0,0,0,0,1,0))

#desired result
df[c(1:2,5:14),]

#How can Improve this?
df %>% group_by(ID) %>% 
  mutate(cumulative = lag(cumsum(event), default = 0)) %>% 
  filter(cumulative <1) %>% 
  select(-cumulative) %>% ungroup
阿克伦

我们可以尝试一下dplyr按“ ID”分组后,检查all“事件”中的元素是否为0(all(event == 0))或(|)行序列小于或等于“事件”(row_number() <= which.max(event)的第一个最大元素的索引,并使用该逻辑索引来filter行。

library(dplyr)
df %>%
   group_by(ID) %>% 
   filter(row_number() <= which.max(event)|all(event==0))
#       ID       date event
#   <dbl>     <date> <dbl>
#1    234 2015-04-27     0
#2    234 2015-04-28     1
#3    235 2015-04-30     0
#4    235 2015-05-01     0
#5    235 2015-05-02     0
#6    235 2015-05-03     0
#7    235 2015-05-04     0
#8    235 2015-05-05     0
#9    237 2015-05-02     0
#10   237 2015-05-03     0
#11   237 2015-05-04     0
#12   237 2015-05-05     1

或者更紧凑的选择event是等于1并检查filter调用中是否小于2的double累积总和

df %>%
   group_by(ID) %>% 
   filter(cumsum(cumsum(event == 1))<2)

或使用data.table,将'data.frame'转换为'data.table'(setDT(df)),按'ID'分组,将if all'event'的元素设置为0,对Data.table(.SD)进行else子集设置,对Data.table进行子集设置,包括从“事件”中的第一个到第一个最大元素。

library(data.table)
setDT(df)[, if(all(event==0)) .SD else .SD[seq(which.max(event))], by = ID]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R组中,计算事件发生后的天数

来自分类Dev

事件发生后自动运行JavaScript

来自分类Dev

事件发生后更改按钮的文本

来自分类Dev

事件发生后更改treepanel的存储

来自分类Dev

在Unix发生后插入特定的行

来自分类Dev

标记个人事件发生后发生的日期

来自分类Dev

事件发生后如何自动刷新angularjs中的表记录

来自分类Dev

事件发生后调用在多个javascript文件中处理的函数

来自分类Dev

如何在onclick事件发生后保持悬停效果?

来自分类Dev

Openend的drawstart事件在drawend发生后触发多次

来自分类Dev

事件发生后如何触发React Hooks

来自分类Dev

事件发生后如何加载Polymer元素?

来自分类Dev

事件发生后Flexslider无法正常工作

来自分类Dev

jQuery在事件发生后无法正常工作

来自分类Dev

事件发生后该对象为null

来自分类Dev

事件发生后的 Angular 5 加载指令

来自分类Dev

保存发生后如何触发模型以提供新数据

来自分类Dev

即使事件发生后定义事件处理程序也会执行

来自分类Dev

Polymer Iron Ajax-错误事件发生后如何访问请求的响应?

来自分类Dev

按键事件发生后如何获取文本光标的位置?

来自分类Dev

事件发生后Three.js画布正在调整大小

来自分类Dev

在事件发生后的时间间隔内分配唯一ID

来自分类Dev

如何以编程方式安排AWS lambda函数在事件发生后运行X倍的时间?

来自分类Dev

动态表的点击事件发生后,隐藏的划分没有出现

来自分类Dev

AngularJS:函数仅在事件发生后更新视图中的变量

来自分类Dev

使用 jQuery 在文本输入上触发 keydown,在事件发生后保留值

来自分类Dev

从数据框中删除分组的行

来自分类Dev

在更新数据属性的keyup事件发生后脚本未触发

来自分类Dev

错误发生后执行的代码

Related 相关文章

  1. 1

    在R组中,计算事件发生后的天数

  2. 2

    事件发生后自动运行JavaScript

  3. 3

    事件发生后更改按钮的文本

  4. 4

    事件发生后更改treepanel的存储

  5. 5

    在Unix发生后插入特定的行

  6. 6

    标记个人事件发生后发生的日期

  7. 7

    事件发生后如何自动刷新angularjs中的表记录

  8. 8

    事件发生后调用在多个javascript文件中处理的函数

  9. 9

    如何在onclick事件发生后保持悬停效果?

  10. 10

    Openend的drawstart事件在drawend发生后触发多次

  11. 11

    事件发生后如何触发React Hooks

  12. 12

    事件发生后如何加载Polymer元素?

  13. 13

    事件发生后Flexslider无法正常工作

  14. 14

    jQuery在事件发生后无法正常工作

  15. 15

    事件发生后该对象为null

  16. 16

    事件发生后的 Angular 5 加载指令

  17. 17

    保存发生后如何触发模型以提供新数据

  18. 18

    即使事件发生后定义事件处理程序也会执行

  19. 19

    Polymer Iron Ajax-错误事件发生后如何访问请求的响应?

  20. 20

    按键事件发生后如何获取文本光标的位置?

  21. 21

    事件发生后Three.js画布正在调整大小

  22. 22

    在事件发生后的时间间隔内分配唯一ID

  23. 23

    如何以编程方式安排AWS lambda函数在事件发生后运行X倍的时间?

  24. 24

    动态表的点击事件发生后,隐藏的划分没有出现

  25. 25

    AngularJS:函数仅在事件发生后更新视图中的变量

  26. 26

    使用 jQuery 在文本输入上触发 keydown,在事件发生后保留值

  27. 27

    从数据框中删除分组的行

  28. 28

    在更新数据属性的keyup事件发生后脚本未触发

  29. 29

    错误发生后执行的代码

热门标签

归档