0

Hi guys I asked a similar question about this here previously and I got some really awesome answers. But it turns out I have more data I need to work with sadly. So I have sample data in this format which is generated using head(data). So I have 3 specimens with their own Time and speed data....I'm not exactly using speed for my actual data

Time Speed Time.1 Speed.1 Time.2 Speed.2

Error in unique.default(x) : unique() applies only to vectors

Would it be possible for you guys to tell me what to do? I can do this in excel with a formula but I have so much data that excel crashes so I really need 'R' but have very minimal knowledge about it...thanks guys....

Community
  • 1
  • 1
  • 1
    Have you run **exactly** the code I wrote on this data with three specimens? It is supposed to work for `any amount` of specimens. That is why we take every other column and run using `lapply`. It works fine for me. Perhaps you should show us the output you want..? – Arun Feb 22 '13 at 07:14
  • And please accept answers if they answer your question. – Arun Feb 22 '13 at 07:19
  • Also here: please read the [FAQ](http://stackoverflow.com/faq) on how to ask a question: giving it a meaningful title is something to start with. – Joris Meys Feb 25 '13 at 12:38

1 Answers1

0

Run the same code. Why are you editing by=3? You want to create idx = 1, 3, 5 .... by=3, will create 1, 4, 7.... Your data, as long as it is in the format Time, data, Time, data, Time, data, ..., ..., you can use the same code

require(IRanges)
# by equals 2 because we want to get the `Time` column index every time
idx <- seq(1, ncol(data), by=2)
# idx is now 1, 3, 5. It will be passed one value at a time to `i`.
# that is, `i` will take values 1 first, then 3 and then 5 and each time
# the code within is executed.
o <- lapply(idx, function(i) {  
    ir1 <- IRanges(start=seq(0, max(data[[i]]), by=401), width=401)
    ir2 <- IRanges(start=data[[i]], width=1)
    t <- findOverlaps(ir1, ir2)
    d <- data.frame(mean=tapply(data[[i+1]], queryHits(t), mean))
    cbind(as.data.frame(ir1), d)
})

gives me for this data:

# > o
# [[1]]
#   start end width mean
# 1     0 400   401 1.05
# 
# [[2]]
#   start end width mean
# 1     0 400   401  1.1
# 
# [[3]]
#   start end width     mean
# 1     0 400   401 1.383333
Arun
  • 116,683
  • 26
  • 284
  • 387