通过使用列之一组合并在公差范围内求和data.frame

时间:2019-04-09 02:53:52

标签: r

我陷入一个简单的问题。如何在ia列中设置公差(diff = + -0.002)内的数字进行组合和表示平均值,并在time列中求和。

例如

 ia<-c(1.001,1.002,2,2.2,1.1,1,1,1,2.5,1,2.8)
 time<-c(4.5,2.4,1.5,1.2,4.9,6.4,4.4, 4.7, 7.3,2.3, 4.3)
 a<-as.data.frame(cbind(ia, time))

       ia time
   1  1.001  4.5
   2  1.002  2.4
   3  2.000  1.5
   4  2.200  1.2
   5  1.100  4.9
   6  1.000  6.4
   7  1.000  4.4
   8  1.000  4.7
   9  2.002  7.3
   10 1.000  2.3
   11 2.800  4.3

   to 

       ia time
   1  1.001  24.7    #  ia = mean(1 2 6 7 8 10)   time = sum(1 2 6 7 8 10)
   3  2.001  9.7     #  ia = mean(2 9)   time = sum(2 9)
   4  2.200  1.2
   5  1.100  4.9
   11 2.800  4.3

谢谢!

2 个答案:

答案 0 :(得分:1)

我根本不清楚您要做什么,而您在评论中给出的示例/解释让我更加抓狂。

此外,以下可能是进一步完善的一个不错的起点。

我们可以使用cutia中的值进行分组,然后通过ia总结timegrp

diff = 0.002
library(dplyr)
a %>%
    mutate(grp = cut(ia, seq(min(ia), max(ia), by = diff), include.lowest = T)) %>%
    group_by(grp) %>%
    summarise(
        io = mean(ia),
        time = sum(time))
## A tibble: 6 x 3
#  grp            io  time
#  <fct>       <dbl> <dbl>
#1 [1,1.002]    1.00  24.7
#2 (1.098,1.1]  1.1    4.9
#3 (1.998,2]    2      1.5
#4 (2.198,2.2]  2.2    1.2
#5 (2.498,2.5]  2.5    7.3
#6 (2.798,2.8]  2.8    4.3

答案 1 :(得分:0)

一种解决方案是制作一个虚拟分组变量。不幸的是,很难从您的问题中看出您要寻找的分组。虽然基于您的玩具输出,但是我想您想要{(0,1.1)[1.1,2.01)[2.01,2.2)[2.2,2.8)[2.8,Inf)}?如果是这样,您可以使用:

U = svd.transform(X) / svd.singular_values_

然后,您可以更轻松地使用tidyverse函数

mySwiper.on('slideChange', function () {
  // write your own scroll to top of slide function here
});