2017-05-23 77 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 
相關問題