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

时间:2017-05-23 14:28:59

标签: r dataframe data.table dplyr

我有下表:

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

基本上我想做的是按id对其进行分组,从origin中选择第一个元素,并保留destination中的最后一个元素,从而生成此表。

id  origin destination price
 1     A      D          2
 2     A      B          3
 3     B      F          6

我知道如何选择第一行和最后一行,但不是为了做我想做的事。

df %>%
group_by(id) %>%
slice(c(1, n())) %>%
ungroup()

是否可以使用dplyr或甚至data.table执行此操作?

2 个答案:

答案 0 :(得分:3)

library(data.table)的解决方案:

unique(setDT(df)[, "origin" := origin[1] , by = id][, "destination" := destination[.N], by = id][, "price" := price[1] , by = id][])

Imo建议的快捷方式:

setDT(df)[, .(origin=origin[1], destination=destination[.N], price=price[1]), by=id]

答案 1 :(得分:1)

使用split的基础R方法:

do.call(rbind, lapply(split(df, df$id), 
                      function(a) with(a, data.frame(origin=head(origin,1), destination=tail(destination,1), price=head(price,1)))))

#  origin destination price
#1      A           D     2
#2      A           B     3
#3      B           F     6