2017-05-23 43 views
4

我有以下表格:分组变量选择第一行(保留一列),最后一行(保持不同的列)

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

只要做'DF%>%GROUP_BY (id)%>%汇总(来源=第一(来源),目的地=最后(目的地),价格=第一(价格))' – akrun

+1

@akrun与往常一样完美地工作。不知道总结的第一个和最后一个功能。谢谢。 – FilipeTeixeira

回答

3

library(data.table) A液:

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

由伊莫建议的快捷方式:

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

在一次调用中,'dt [,。(origin = origin [1],destination = destination [.N],price = price [1]),by = id]'。 – lmo

+0

不错,随时发帖,然后我删除这一个。 – BigDataScientist

+0

没关系。如果你愿意,你可以将它添加到你的答案中。 – lmo

1

甲基础R的方法使用split

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 
相关问题