[R] binned tabulation
Rui Barradas
rui1174 at sapo.pt
Tue Apr 10 02:38:47 CEST 2012
Hello,
Jean V Adams wrote
>
> Delia,
>
> name <- data.frame(Behavior=c(1, 2, 1, 2, 1), Time=c(0, 40, 45, 55, 57))
>
> appear <- name$Time[name$Behavior==1]
> disappear <- name$Time[name$Behavior==2]
> if(length(appear) > length(disappear)) disappear <- c(disappear, 60)
> sum(disappear - appear)
>
> Delia Shelton wrote on 04/09/2012 12:30:23 PM:
>
>> Hi,
>>
>> I am attempting to tabulate binned data. The '1' represents the
>> appearance of the focal mouse pup, and '2' represents the
>> disappearance of the focal mouse pup. The code written below is
>> intended to calculate the total time spent appeared out of 3600s.
>> For Sample 1, both the hand calculation and R code yield the same
>> result, 50. A problem seems to occur when '1' is the last entry. For
>> Sample 2, the total time appeared is 53 (hand calculation),
>> however, using the R code below yields 55. If you have any
>> suggestions for solving the problem, please let me know.
>>
>> Thank you in advance for any assistance you may provide.
>>
>> Delia
>>
>>
>> Sample 1
>>
>> 0.0 1
>> 40 2
>> 45 1
>> 55 2
>>
>>
>> Sample 2
>>
>> 0.0 1
>> 40 2
>> 45 1
>> 55 2
>> 57 1
>>
>>
>>
>> name = read.table(file.choose(),header=F) # opening a data file
>> colnames(name)<-c("Time", "Behavior")
>> name = data.frame(name$Behavior, name$Time)
>> colnames(name)<-c("Behavior", "Time")
>> name<-name[name$Time < 3600, ];
>>
>> ## run file
>>
>> x<-seq(0,3600, by = 60) # total time partition by time which is 60
>>
>> if (tail(name$Behavior, 1) == 1) {name<-rbind(name, c(4, 3600))} else
>> {name<-rbind(name, c(1, 3600))}
>>
>> if (nrow(name) %% 2 != 0)
>> {name <-name[-c(nrow(name)), -c(nrow(name))]}
>>
>> q<-NULL
>> for (y in (1: nrow(name)))
>> {
>> if (y %% 2 != 0)
>> q<-c(q, (c(name$Time[y]:name$Time[y +1])))
>> }
>>
>> b<-table(cut(q,x))
>>
>> sum(b)
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@ mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
Or use a logical index into the data.frame's rows.
fun.count <- function(x, increment=60){
if (x$Behavior[nrow(x)] == 1)
x <- rbind(x, c(4, increment*ceiling(x$Time[nrow(x)] / increment)))
inx <- x$Behavior == 1
sum(x$Time[!inx] - x$Time[inx])
}
fun.count(name)
Hope this helps,
Rui Barradas
--
View this message in context: http://r.789695.n4.nabble.com/binned-tabulation-tp4543405p4544257.html
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list