分组变量选择第一行(保留一列),最后一行(保留不同列)

Fil*_*ira 5 r dataframe dplyr data.table

我有下表:

id  origin destination price
 1     A      B          2
 1     C      D          2
 2     A      B          3
 3     B      E          6
 3     E      C          6
 3     C      F          6
Run Code Online (Sandbox Code Playgroud)

基本上我想做的是将其分组id,从中选择第一个元素origin,并防止最后一个元素出现destination在该表中。

id  origin destination price
 1     A      D          2
 2     A      B          3
 3     B      F          6
Run Code Online (Sandbox Code Playgroud)

我知道如何选择第一行和最后一行,但不执行我想要的操作。

df %>%
group_by(id) %>%
slice(c(1, n())) %>%
ungroup()
Run Code Online (Sandbox Code Playgroud)

是否有可能与要做到这一点dplyr,甚至有data.table

Big*_*ist 4

解决方案library(data.table)

unique(setDT(df)[, "origin" := origin[1] , by = id][, "destination" := destination[.N], by = id][, "price" := price[1] , by = id][])
Run Code Online (Sandbox Code Playgroud)

Imo 建议的快捷方式:

setDT(df)[, .(origin=origin[1], destination=destination[.N], price=price[1]), by=id]
Run Code Online (Sandbox Code Playgroud)

  • 在一次调用中,`dt[, .(origin=origin[1], destination=destination[.N], Price=price[1]), by=id]`。 (4认同)