根据R中的第一次和最后一次出现折叠观察行

根据R中的第一次和最后一次出现折叠观察行,r,R,我有一个这样的数据集 ID EQP_ID DATE ENTRY EXIT 10 1232 10/01/2018 0058 NA 10 8123 10/01/2018 NA 0059 11 8231 10/02/2018 0063 NA 11 233

我有一个这样的数据集

ID        EQP_ID         DATE           ENTRY     EXIT
10        1232           10/01/2018     0058      NA
10        8123           10/01/2018     NA        0059
11        8231           10/02/2018     0063      NA
11        233            10/03/2018     0064      NA
11        2512           10/04/2018     NA        0099
11        2111           10/05/2018     NA        1000
我希望折叠观察结果,以便我看到的具有给定ID的“条目”的最早行与具有退出值的最新行组合,并且我还获得与退出记录关联的EQP_ID:

ID       EQP_ID    ENTRY       EXIT
10       8123      0058        0059
11       2111      0063        1000
我对R相当陌生,这非常复杂,以至于我想不出一个不使用循环的好方法来实现它,而且可以预见性能不是很好

编辑

我想这就行了,但我还是很好奇其他更有经验的人是否有更好的答案

> group_by(dataset, ID) %>% 
  arrange(ENTRY) %>% 
  summarize(ENTRY = first(ENTRY), EXIT = last(exit), EQP_ID = last(EQP_ID))

带有data.table的一个选项:

library(data.table)

#create example data
dt <- data.table(
    id = c(10, 10, 11, 11, 11, 11),
    date = seq(as.Date("2018-10-1"), as.Date("2018-10-6"), by="day"),
    entry = c(58, NA, 63, 64, NA, NA),
    exit = c(NA, 59, NA, NA, 99, 100)
)

# number rows by id
dt[order(id, date), num := 1:.N, by=id]

# get first-entry and last-exit values by id
dt[ , keepentry := entry[1],by=id]
dt[ , keepexit  := exit[.N],by=id]

# keep one row per id
dt[num==1, .(id, keepentry, keepexit)]
库(data.table)
#创建示例数据

dt使用
dplyr::first
dplyr::last
我们可以执行以下操作,我们可以使用
min
max

library(dplyr)
df %>% group_by(ID) %>% 
       summarise(EQP_ID=dplyr::last(EQP_ID), First=dplyr::first(ENTRY),Last=dplyr::last(EXIT))


 # A tibble: 2 x 4
 ID EQP_ID First  Last
 <int>  <int> <int> <int>
1    10   8123    58    59
2    11   2111    63  1000
库(dplyr)
df%%>%分组依据(ID)%%>%
总结(EQP_ID=dplyr::last(EQP_ID),First=dplyr::First(进入),last=dplyr::last(退出))
#一个tibble:2x4
ID设备ID第一个最后一个
1    10   8123    58    59
2    11   2111    63  1000

此解决方案使用
dplyr
。首先,定义数据帧

df <- read.table(text = "ID        EQP_ID         DATE           ENTRY     EXIT
10        1232           10/01/2018     0058      NA
10        8123           10/01/2018     NA        0059
11        8231           10/02/2018     0063      NA
11        233            10/03/2018     0064      NA
11        2512           10/04/2018     NA        0099
11        2111           10/05/2018     NA        1000", header = TRUE)
这就给,

# # A tibble: 2 x 4
#       ID EQP_ID ENTRY  EXIT
#    <int>  <int> <int> <int>
# 1    10   8123    58    59
# 2    11   2111    63  1000
##一个tible:2x4
#ID设备\u ID出入口
#        
# 1    10   8123    58    59
# 2    11   2111    63  1000

非常感谢!看起来几乎和我同事帮我想出的一模一样。
# # A tibble: 2 x 4
#       ID EQP_ID ENTRY  EXIT
#    <int>  <int> <int> <int>
# 1    10   8123    58    59
# 2    11   2111    63  1000