【问题标题】:finding difference between two rows in the same column using R programming使用R编程查找同一列中两行之间的差异
【发布时间】:2013-03-14 13:28:31
【问题描述】:

所以基本上,我有这段代码可以让我将我的时间列分成 50 小时间隔 这是代码......我需要帮助来编写差异(差异 - 我在下面放了一个空格)函数......我在下面进一步解释了这一点

Time<- seq(1, ncol(analyse), by=2)
o <- lapply(Time, function(i){  
xf1 <- IRanges(start=seq(0, max(analyse[[i]]), by=50), width=50)
xf2 <- IRanges(start=data[[i]], width=1)
t <- findOverlaps(xf1, xf2)
diff <-_____________________________________
d <- data.frame(Diff=tapply(data[[i+1]], queryHits(t), diff))
cbind(as.data.frame(xf1), d)})

这是我的示例数据

Time(hr)  Kilometres reached
1.7        2.0   
2.4       15.6
6.8       23.1
9.3       11.5
11.6      12.3
23.4      1.3
28.4      9.7
30.1      15.2
35.7      16.3
42.3      15.8
48.2      14.6
50.0      14.2  

因此,当我的代码将我的时间分成 50 小时间隔时......我希望它在该间隔内用第一个值获取间隔的最后一个值......例如 我想要这种类似的输出

Time(hr)   Kilometres reached
50         12.2 (based from the sample data mentioned= 14.2-2.0)        
100   

谢谢大家

【问题讨论】:

    标签: r subtraction


    【解决方案1】:

    这个怎么样? (例如,使用 10 小时间隔,例如 @Tyler)

    # assuming your data.frame is sorted by Time.hr.
    require(IRanges)
    ir1 <- IRanges(df$Time.hr., width=1)
    sq  <- seq(10, max(df$Time.hr., by=10)+10, by=10)
    ir2 <- IRanges(start = c(0, head(sq, -1)) + 1, end = sq)
    
    olaps <- findOverlaps(ir2, ir1)
    tapply(subjectHits(olaps), sq[queryHits(olaps)], 
            function(x) df$Kilometres[max(x)] - df$Kilometres[min(x)])
    #  10   20   30   40   50 
    #  9.5  0.0 13.9  0.0 -1.6 
    

    【讨论】:

      【解决方案2】:

      这是我使用 10 小时间隔代替的解决方案(因为您只有一个间隔可以测试):

      dat <- read.table(text="Time  Kilometres
      1.7        2.0   
      2.4       15.6
      6.8       23.1
      9.3       11.5
      11.6      12.3
      23.4      1.3
      28.4      9.7
      30.1      15.2
      35.7      16.3
      42.3      15.8
      48.2      14.6
      50.0      14.2", header=TRUE)
      
      
      ints <- seq(0, 50, by=10)
      dat$new <- cut(dat$Time, ints)
      out <- sapply(split(dat$Kilometres, dat$new), function(x) diff(c(x[1], tail(x, 1))))
      data.frame(Time = ints[-1], Kilometres =out, row.names=NULL)
      

      产量:

        Time Kilometres
      1   10        9.5
      2   20        0.0
      3   30        8.4
      4   40        1.1
      5   50       -1.6
      

      【讨论】:

        猜你喜欢
        • 2013-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多