在R中,从每组n个元素

时间:2017-03-01 03:31:54

标签: r

无法在网上找到与此相似的内容,这是我一直在努力解决的看似简单的数据操作问题。我创建了一个看起来如此的距离矢量:

distances = c(3, 5, 7, 9, 2.3, 5.2, 1.8, 2.3, 9, 0.75, 14, 11, 4.4, 12, 13)

距离永远是一个长度为5的倍数的向量,在我的情况下长度(距离)== 15.我试图获得这个:

output = c(2.3, 0.75, 4.4)

这里,2.3是前5个元素的最小值,0.75是元素6:10的最小值,4.4是元素11:15的最小值。这感觉它适用于应用功能,但我不太熟悉它们。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:4)

这里有一些可能性:

1)apply / matrix 形成一个矩阵,其中包含5行distances逐列出矢量列,然后取每列的最小值:

apply(matrix(distances, 5), 2, min)
## [1] 2.30 0.75 4.40

2)zoo :: rollapply 另一种方法是使用动物园包中的rollapply,指定我们希望每5个元素中最少使用5个元素并跳过5到下一个元素重复5个元素。

library(zoo)

rollapply(distances, 5, by = 5, min)
## [1] 2.30 0.75 4.40

3)tapply / gl 由于长度(距离)/ 5 = 15/5 = 3组,每个长度为5:

tapply(distances, gl(3, 5), min)
##    1    2    3 
## 2.30 0.75 4.40 

4)tapply / col 这类似于(3);但是,取代gl代替col(matrix(...))使用来自(1)的matrix想法:

tapply(distances, col(matrix(distances, 5)), min)
##    1    2    3 
## 2.30 0.75 4.40