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?
解决方案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)