如何确定R中某个组中的第一个/最后一个观测值?

时间:2019-04-01 22:50:25

标签: r dplyr

我想在R中的数据帧中提取每个组中的第一行和最后一行数据。我有一长串数据(约300,000个观测值),其中有数千个组。对于每个组,我需要第一个和最后一个观测值(在这种情况下,我要提取数千个测量样点的第一个和最后一个纬度/经度)。

我想出了一个可行的for循环解决方案:我一次将数据分组为一组,但是想看看是否有更干净的方法来解决此问题:

library(tidyverse) 


#example survey data along CA coastline

example.data = data.frame(group = c(rep('A',20),rep('B',20),rep('C',20)),
                   latitude = seq(32,38, length.out = 60),  #N samples, mean, sd
                   longtitude = seq(-119,-122,length.out = 60)) 

head(example.data)

这看起来像:

group latitude longtitude
    A 32.00000  -119.0000
    A 32.10169  -119.0508
    A 32.20339  -119.1017
    A 32.30508  -119.1525
    A 32.40678  -119.2034

这是我使用for循环的解决方案:

#find groups (i.e. transects)
letter.levels = levels(example.data$group)

first_last = c()

for(i in 1:length(letter.levels)){
  d = filter(example.data, group == letter.levels[i])
  d.len = length(d[,1])
  first = d[1,]
  last = d[d.len,]

  first_last = rbind(first,last,first_last)
}

#view results
first_last

我要寻找的最终结果是(每个测量样线的开始/停止位置):

group latitude longtitude
    C  36.0678  -121.0339
    C  38.0000  -122.0000
    B  34.0339  -120.0169
    B  35.9661  -120.9831
    A  32.0000  -119.0000
    A  33.9322  -119.9661

请问我有没有更干净的dplyr版本?如果没有其他问题,我总是可以退回到这个for循环版本。

我搜索了帮助,发现: somewhat related questionanother(but different) for-loop suggestion

0 个答案:

没有答案