Hi Guys,
stumped by a simple problem. I would like to take a file of the form
Pair group param1
1 D 10
1 D 10
1 R 10
1 D 10
2 D 10
2 D 10
2 D 10
2 R 10
2 R 10
etc..
and for each pair, calculate the average of param1 for group D entries,
subtract from the average of param1 for the group R entries, and then write
the results (ie, AveParam1D AveParam1R dif) in a tab delimited file. Below
is the start of my code. the difficulty i am having is in creating a while
loop that stops once there are no more lines to read from the input file.
also not sure of the best way to write in the results, though I think I
should use rbind.
data <- data.frame(alldata)
i <- 1
# need appropriate while loop
{
ss <- subset(data, Pair==i)
ssD <- subset(ss, DR==D)
ssR <- subset(ss, DR==R)
p1 <- mean(ssD$Length)
p2 <- mean(ssR$Length)
dif <- p1-p2
out <- rbind(data.frame(P1, P2, diff)
i <-i + 1
}
write.table(out, file="out", quote=F, row.names=F, col.names=T,
sep="\t")
I have spent an absurd amount of time trying to sort this out with the
manual and forum searches. Any suggestions appreciated.
Marcel
--
View this message in context:
http://r.789695.n4.nabble.com/while-loop-until-end-of-file-tp2399544p2399544.html
Sent from the R help mailing list archive at Nabble.com.
Eh?
## First calculate the means:
mns <- with(alldata, tapply(param1, list(Pair, group), mean))
## now put the results into a data frame
res <- data.frame(mns, dif = mns[, "D"] - mns[, "R"])
## Then write it out if that's your thing.
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On Behalf Of Marcel Curlin
Sent: Monday, 30 August 2010 2:08 PM
To: r-help at r-project.org
Subject: [R] while loop until end of file
Hi Guys,
stumped by a simple problem. I would like to take a file of the form
Pair group param1
1 D 10
1 D 10
1 R 10
1 D 10
2 D 10
2 D 10
2 D 10
2 R 10
2 R 10
etc..
and for each pair, calculate the average of param1 for group D entries,
subtract from the average of param1 for the group R entries, and then write
the results (ie, AveParam1D AveParam1R dif) in a tab delimited file. Below
is the start of my code. the difficulty i am having is in creating a while
loop that stops once there are no more lines to read from the input file.
also not sure of the best way to write in the results, though I think I
should use rbind.
data <- data.frame(alldata)
i <- 1
# need appropriate while loop
{
ss <- subset(data, Pair==i)
ssD <- subset(ss, DR==D)
ssR <- subset(ss, DR==R)
p1 <- mean(ssD$Length)
p2 <- mean(ssR$Length)
dif <- p1-p2
out <- rbind(data.frame(P1, P2, diff)
i <-i + 1
}
write.table(out, file="out", quote=F, row.names=F, col.names=T,
sep="\t")
I have spent an absurd amount of time trying to sort this out with the
manual and forum searches. Any suggestions appreciated.
Marcel
--
View this message in context:
http://r.789695.n4.nabble.com/while-loop-until-end-of-file-tp2399544p2399544.html
Sent from the R help mailing list archive at Nabble.com.
______________________________________________
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.
Hi Marcel,
Not quite sure what you want the while loop for. Does this do what you want?
mydat <- read.table(textConnection("
Pair group param1
1 D 10
1 D 10
1 R 10
1 D 10
2 D 10
2 D 10
2 D 10
2 R 10
2 R 10"), header = TRUE)
closeAllConnections()
mydat$Pair <- factor(mydat$Pair)
# Calculate the mean of param1 for each level of group AND of Pair
by(mydat$param1, list(mydat$group, mydat$Pair), mean)
# Since there are two means for each Pair, set ncol = 2 and byrow = TRUE
# That way each row in the matrix represents 1 Pair
mydat2 <- matrix(by(mydat$param1, list(mydat$group, mydat$Pair), mean),
ncol = 2, byrow = TRUE)
mydat2 <- cbind(mydat2, mydat2[ , 2] - mydat2[ , 1])
colnames(mydat2) <- c("AveParamD", "AveParamR",
"diff")
mydat2
Cheers,
Josh
On Sun, Aug 29, 2010 at 9:08 PM, Marcel Curlin
<cemarcel at u.washington.edu> wrote:>
> Hi Guys,
> stumped by a simple problem. I would like to take a file of the form
>
> Pair ? ? group ? ? param1
> 1 ? ? ? ? ? D ? ? ? ? ? 10
> 1 ? ? ? ? ? D ? ? ? ? ? 10
> 1 ? ? ? ? ? R ? ? ? ? ? 10
> 1 ? ? ? ? ? D ? ? ? ? ? 10
> 2 ? ? ? ? ? D ? ? ? ? ? 10
> 2 ? ? ? ? ? D ? ? ? ? ? 10
> 2 ? ? ? ? ? D ? ? ? ? ? 10
> 2 ? ? ? ? ? R ? ? ? ? ? 10
> 2 ? ? ? ? ? R ? ? ? ? ? 10
> etc..
>
> and for each pair, calculate the average of param1 for group D entries,
> subtract from the average of param1 for the group R entries, and then write
> the results (ie, AveParam1D ?AveParam1R dif) in a tab delimited file. Below
> is the start of my code. the difficulty i am having is in creating a while
> loop that stops once there are no more lines to read from the input file.
> also not sure of the best way to write in the results, though I think I
> should use rbind.
>
> data <- data.frame(alldata)
>
> i <- 1
> # need appropriate while loop
> {
> ss <- subset(data, Pair==i)
> ssD <- subset(ss, DR==D)
> ssR <- subset(ss, DR==R)
> p1 <- mean(ssD$Length)
> p2 <- mean(ssR$Length)
> dif <- p1-p2
> out <- rbind(data.frame(P1, P2, diff)
> i <-i + 1
> }
>
> write.table(out, file="out", quote=F, row.names=F, col.names=T,
sep="\t")
>
> I have spent an absurd amount of time trying to sort this out with the
> manual and forum searches. Any suggestions appreciated.
>
> Marcel
>
> --
> View this message in context:
http://r.789695.n4.nabble.com/while-loop-until-end-of-file-tp2399544p2399544.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
>
--
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/