假设以下数据
OriginId, OriginName, DestinationId, DestinationName,Time
1 , Origin 1, 1 , Destination 1 , 20
1 , Origin 1, 2 , Destination 2 , 25
2 , Origin 2, 3 , Destination 3 , 14
2 , Origin 2, 4 , Destination 4 , 29
这是一个 CSV,保存出发地和目的地之间的旅行时间。我想找到每个出发地最近的目的地。换句话说,我必须按 OriginId 对数据进行分组,并根据时间对每个组进行排名,并获取排名为 1 的行。因此,上述数据的期望结果是:
OriginId, OriginName, DestinationId, DestinationName,Time(Minute)
1 , Origin 1, 1 , Destination 1 , 20
2 , Origin 2, 3 , Destination 3 , 14
group by 之后我需要使用哪个 R 函数?
最佳答案
使用dplyr
,可以按'OriginId'分组,然后使用which.min
获取具有最小'Time'的'Time'的行索引,提取该行索引带有切片
的行。
library(dplyr)
df1 %>%
group_by(OriginId) %>%
slice(which.min(Time))
或者,如果我们考虑使用data.table
,请将“data.frame”转换为“data.table”(setDT(df1)
),按'OriginId',我们获取行索引(如前一种情况)并对数据集的行进行子集化 (.SD
)。
library(data.table)
setDT(df1)[, .SD[which.min(Time)], by = OriginId]
关于r - 如何在 R 中分组并选择最低值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34178899/