我有下表:
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
来做到这一点? 最佳答案
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]