如何对相似的行进行分组,并查询R中的某些行列?
我不熟悉R语言。我的问题是如何对相似的行进行分组,并查询R中的某些行列?,r,R,我不熟悉R语言。我的问题是 我想用多个ID管理起点-终点位置。 以下是我的原始数据(csv文件)示例 车辆识别号 位置 时间 0111111111 13_100.27 13.58 0111111111 13_140.87 17.38 0222222222 12_445.78 2.15 这是否有效: library(dplyr) df %>% group_by(vehicle_id) %>% summarise('location origin' = location, 'start
library(dplyr)
df %>% group_by(vehicle_id) %>% summarise('location origin' = location, 'start time' = time,
'location destination' = lead(location), 'finish time' = lead(time)) %>% na.omit()
`summarise()` regrouping output by 'vehicle_id' (override with `.groups` argument)
# A tibble: 2 x 5
# Groups: vehicle_id [2]
vehicle_id `location origin` `start time` `location destination` `finish time`
<dbl> <chr> <dbl> <chr> <dbl>
1 111111111 13_100.27 13.6 13_140.87 17.4
2 222222222 12_445.78 2.15 13_102.99 23.6
库(dplyr)
df%%>%分组依据(车辆id)%%>%汇总('位置来源'=位置,'开始时间'=时间,
“地点-目的地”=潜在客户(地点),“完成时间”=潜在客户(时间))%>%na.omit()
`summary()`按'vehicle_id'重新分组输出(用'.groups'参数覆盖)
#一个tibble:2x5
#组别:车辆识别号[2]
车辆id`位置起点'`开始时间'`位置目的地'`结束时间`
1 111111111 13_100.27 13.6 13_140.87 17.4
2 222222222 12_445.78 2.15 13_102.99 23.6
使用的数据:
df
# A tibble: 4 x 3
vehicle_id location time
<dbl> <chr> <dbl>
1 111111111 13_100.27 13.6
2 111111111 13_140.87 17.4
3 222222222 12_445.78 2.15
4 222222222 13_102.99 23.6
df
#一个tibble:4x3
车辆识别码定位时间
1 111111111 13_100.27 13.6
2 111111111 13_140.87 17.4
3 222222222 12_445.78 2.15
4 222222222 13_102.99 23.6
使用SQL,我们可以将每次旅行的开始时间和地点提取到开始\u数据中
,类似地,将结束时间和地点提取到结束\u数据中
,然后将它们合并。这利用了这样一个事实,即如果使用min,SQLite将自动选择最小化行上的位置,对于max也是如此
library(sqldf)
sqldf("
with start_data as (
select vehicle_id, location start_location, min(time) start_time
from Trips
group by vehicle_id),
end_data as (
select vehicle_id, location end_location, max(time) end_time
from Trips
group by vehicle_id)
select * from start_data left join end_data using(vehicle_id)")
给予:
vehicle_id start_location start_time end_location end_time
1 111111111 13_100.27 13.58 13_140.87 17.38
2 222222222 12_445.78 2.15 12_445.78 2.15
注
可复制形式的输入
Trips <- structure(list(vehicle_id = c(111111111L, 111111111L, 222222222L
), location = c("13_100.27", "13_140.87", "12_445.78"), time = c(13.58,
17.38, 2.15)), class = "data.frame", row.names = c(NA, -3L))
Trips谢谢你的帮助,格罗森迪克!然而,在我应用了你的代码之后,我的开始时间和结束时间都非常奇怪。现在不是时候了。例如,开始时间的值是36,结束时间是86312,但剩余的结果是满意的。问题中的数据需要以可复制的形式提供。由于没有这样做,我在便笺中为您做了这件事,您可以从答案中的输出中看到它工作正常。请注意标签页顶部的说明,其中要求提供显示dput(X)
输出的数据,其中X是适当减少的输入。还请注意,此链接中的解决方案:可能适用。特别是使用折叠包的解决方案运行得非常快。嗨!如果您提供一个小样本数据集,读者可以直接使用它,您可能会更快地得到有用的答案。例如,尝试dput(head,您的数据集,10)并将输出附加到您的问题中。