如何对相似的行进行分组,并查询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

我不熟悉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 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)并将输出附加到您的问题中。