Skip to content

average environmental data if AnimalID and Time is duplicated

5 messages · Tagmarie, Jim Lemon, Rui Barradas +1 more

#
Hello,
I tried for about three hours now to solve this problem but I can't figure
it out. I am sure someone knows how do it. At least I hope so. 

I have a data frame somewhat like this: 

myframe <- data.frame (ID=c("Ernie", "Ernie", "Bert", "Bert"),
Timestamp=c("24.09.2012 09:00", "24.09.2012 09:00", "24.09.2012 10:00",
"25.09.2012 10:00"), Hunger=c("1","5","2","2"), Temp=c("25","30","27","28")
)
myframe

As you can see for Ernie I do have different data for 24.09.2012 9:00. Now I
would like to average the Hunger and Temp value for this timestamp to get a
data frame without duplicated Times and the respective average Temp and
Hunger. 

I tried something like 
Meanframe<-  by(myframe[, 3:4], duplicated(myframe$ID,
Zusatzdaten3$Timestamp) == TRUE, mean)
but it doesn't work and I guess that it is also totally crap ;-)

Tagmarie




--
View this message in context: http://r.789695.n4.nabble.com/average-environmental-data-if-AnimalID-and-Time-is-duplicated-tp4644218.html
Sent from the R help mailing list archive at Nabble.com.
#
On 09/26/2012 08:53 PM, Tagmarie wrote:
Hi Tagmarie,
Your problem is that both Hunger and Temp are read in as factors. If you 
try it like this:

by(as.numeric(as.character(myframe[,3])),myframe[,"ID"],mean)
by(as.numeric(as.character(myframe[,4])),myframe[,"ID"],mean)

You might get what you want. The "as.character" call is necessary, 
otherwise you will get the wrong mean values.

Jim
#
Hello,

Why do you have Hunger and Temp recorded as characters? Between double 
quotes?


myframe <- data.frame (ID=c("Ernie", "Ernie", "Bert", "Bert"),
Timestamp=c("24.09.2012 09:00", "24.09.2012 09:00", "24.09.2012 10:00",
"25.09.2012 10:00"), Hunger=c("1","5","2","2"), Temp=c("25","30","27","28")
)
str(myframe)

myframe$Hunger <- as.numeric(levels(myframe$Hunger)[myframe$Hunger])
myframe$Temp <- as.numeric(levels(myframe$Temp)[myframe$Temp])

aggregate(cbind(Hunger, Temp) ~ ID, data = myframe, FUN = mean)

Hope this helps,

Rui Barradas

Em 26-09-2012 11:53, Tagmarie escreveu:
#
HI,

Just to add to Jim's solution with data.table()
myframe<- data.frame (ID=c("Ernie", "Ernie", "Bert", "Bert"),
?Timestamp=c("24.09.2012 09:00", "24.09.2012 09:00", "24.09.2012 10:00",
?"25.09.2012 10:00"), Hunger=c("1","5","2","2"), Temp=c("25","30","27","28")
?)
library(data.table)
myframe1<-data.table(myframe)
?myframe2<-within(myframe1,{Hunger<-as.numeric(as.character(Hunger)); Temp<-as.numeric(as.character(Temp))})
?myframe2[,list(meanHunger=mean(Hunger),meanTemp=mean(Temp)),list(ID,Timestamp)]
?# ??? ID??????? Timestamp meanHunger meanTemp
#1: Ernie 24.09.2012 09:00????????? 3???? 27.5
#2:? Bert 24.09.2012 10:00????????? 2???? 27.0
#3:? Bert 25.09.2012 10:00????????? 2???? 28.0
A.K.


----- Original Message -----
From: Jim Lemon <jim at bitwrit.com.au>
To: Tagmarie <Ramgad82 at gmx.net>
Cc: r-help at r-project.org
Sent: Wednesday, September 26, 2012 7:29 AM
Subject: Re: [R] average environmental data if AnimalID and Time is duplicated
On 09/26/2012 08:53 PM, Tagmarie wrote:
Hi Tagmarie,
Your problem is that both Hunger and Temp are read in as factors. If you 
try it like this:

by(as.numeric(as.character(myframe[,3])),myframe[,"ID"],mean)
by(as.numeric(as.character(myframe[,4])),myframe[,"ID"],mean)

You might get what you want. The "as.character" call is necessary, 
otherwise you will get the wrong mean values.

Jim

______________________________________________
R-help at r-project.org 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.