On Nov 1, 2010, at 6:41 AM, Petr PIKAL wrote:

Hi


r-help-boun...@r-project.org napsal dne 31.10.2010 09:59:00:

Hi Dennis,



Thank you for your extensive explanations. Yes, I guess I did not
explain what
I would like to do.

Basically I would like to conduct a linear regression for each of 15
classes.

In that case you can also use a nlme package. However I would strongly
recommend a Pinheiro-Bates book which accompanies this package for
complete utilisation the power of nlme package.

Or you can convert your column with values 1-15 to factor and call simple
linear model

fit<-lm(y~x+factor.column, data=razred)

Which would force the slopes of the estimate regression lines to have a common value and only allow the factor estimates to reflect different group means. If he wants a separate mean (actually getting an estimate for the offset to the intercept) and slope estimate for each group, then:

fit<-lm(y ~ x * factor.column, data=razred)

And in that case, an introductory regression text will suffice.

--
David.



Regards
Petr


Your answers gave me new

Perspective on how R works.



Thanks again for the help,

m



From: Dennis Murphy [mailto:djmu...@gmail.com]
Sent: Sunday, October 31, 2010 4:40 AM
To: MatevĹľ PavliÄŤ
Cc: r-help@r-project.org
Subject: Re: [R] for loop



Hi:

If your objective is to make 15 plots, one for each level of razred,
then you
don't need to make 15 individual data frames first. The lattice and
ggplot2
packages allow conditioning plots. You haven't mentioned what types of
plots
you're interested in getting, but if it's something simple like a
scatterplot
of y vs. x for each level of razred, it's not that hard to do. Let's
fake some data:

d <- data.frame(razred = rep(LETTERS[1:15], each = 10),
                  x = rep(1:10, 15),
                  y = rep(2 + 0.5 * 1:10, 15) + rnorm(150))

d has 15 levels of razred with 10 observations at each level. razred is
a
factor, the other variables are either integer or numeric.

Produce scatterplots of y vs. x for each level of razred, using both the

lattice and ggplot2 packages:

library(lattice)
# each plot adds a new feature - run one plot at a time.
xyplot(y ~ x | razred, data = d, type = c('p', 'r'))
xyplot(y ~ x | razred, data = d, type = c('p', 'r'), layout = c(3, 5)) xyplot(y ~ x | razred, data = d, type = c('p', 'r'), layout = c(3, 5),
as.table = TRUE)

library(ggplot2)
ggplot(d, aes(x, y)) + geom_point() + geom_smooth(method = 'lm') +
   facet_wrap( ~ razred, ncol = 3)
ggplot(d, aes(x, y)) + geom_point() + geom_smooth(method = 'lm', se =
FALSE) +
  facet_wrap( ~ razred, ncol = 3)

If instead you want something like a scatterplot matrix for each data
subset
defined by level of razred, then maybe something like this (?):

# add a new variable to the data frame
# splom is the scatterplot matrix function in lattice
d$z1 <- rnorm(150)
splom(~ d[, -1] | razred, data = d, layout = c(2, 2, 4))

Just guessing here since you didn't make your objective explicit.

It's entirely possible that you can conduct a significant part of your
data
analysis without having to split the data into subsets. Several summary
functions, for example, can compute a number of summary functions by
group
with a one-line call. Here are a couple of examples, one using
aggregate()
from the base package and another using function ddply() from the plyr
package:

aggregate(y ~ razred, data = d, FUN = mean)
  razred        y
1       A 4.816841
2       B 4.520804
3       C 5.196329
4       D 4.615575
5       E 3.982240
6       F 4.466559
7       G 4.938669
8       H 4.539541
9       I 4.354991
10      J 4.573654
11      K 4.450624
12      L 5.138087
13      M 4.931111
14      N 4.879493
15      O 5.087452

library(plyr)
ddply(d, 'razred', summarise, mx = mean(x), my = mean(y), mz1 =
mean(z1))
  razred  mx       my         mz1
1       A 5.5 4.816841 -0.01745305
2       B 5.5 4.520804  0.24724069
3       C 5.5 5.196329  0.18717750
4       D 5.5 4.615575  0.18885590
5       E 5.5 3.982240 -0.91284339
6       F 5.5 4.466559  0.36479266
7       G 5.5 4.938669 -0.36359562
8       H 5.5 4.539541  0.06061162
9       I 5.5 4.354991  0.05138409
10      J 5.5 4.573654  0.31160018
11      K 5.5 4.450624  0.17458712
12      L 5.5 5.138087 -0.26482357
13      M 5.5 4.931111 -0.39194953
14      N 5.5 4.879493  0.33154075
15      O 5.5 5.087452  0.32816931

There are a number of functions and packages that will do this sort of
thing
quite well - I'll mention doBy, data.table, Hmisc and sqldf as excellent

options, noting that there are other packages and functions in the apply

family that can perform groupwise processing seamlessly. The point of
mentioning this is so that you don't automatically think you have to
split the
data in myriad ways before you can process a function. The good folks
that
designed this language, and the many people who have contributed code to
the R
project, are pretty smart, and have devised fairly simple ways to
process
data, even if it's large.

Of course, it's always possible that splitting is necessary; if you're
willing
to be a little more forthcoming about your analysis goals, you might get
a
better targeted response..

HTH,
Dennis



On Sat, Oct 30, 2010 at 12:00 PM, MatevĹľ PavliÄŤ
<matevz.pav...@gi-zrmk.si> wrote:

Just one more thing...
I get a list with 15 data.frames :

List of 15
$ 1:'data.frame':      7 obs. of  9 variables:
..$ vrtina : Factor w/ 6 levels "T1A-1","T1A-2",..: 1 1 2 2 5 5
5
..$ globina.meritve: num [1:7] 7.6 8.5 10.4 17.4 12.5 15.5 16.5
..$ E0             : num [1:7] 4109 2533 491 810 2374 ...
..$ Eur1           : num [1:7] 6194 4713 605 1473 NA ...
..$ Eur2           : num [1:7] 3665 7216 266 4794 7387 ...
..$ Eur3           : num [1:7] 3221 3545 920 3347 6768 ...
..$ H              : num [1:7] 8 5.9 5.9 6.9 9.3 10.9 10
..$ Mpl            : num [1:7] 61.9 136.7 19.9 96.4 178.5 ...
..$ class          : int [1:7] 1 1 1 1 1 1 1
.
.
.

But how would I acces them (i.e. to draw a plot for each data.frame for
each
data.frame in a list)?

Thanks,m


-----Original Message-----
From: David Winsemius [mailto:dwinsem...@comcast.net]
Sent: Saturday, October 30, 2010 8:24 PM
To: MatevĹľ PavliÄŤ
Cc: r-help@r-project.org
Subject: Re: [R] for loop


On Oct 30, 2010, at 2:07 PM, MatevĹľ PavliÄŤ wrote:

Hi,

I know this is probalby a very trivial thing to do for most of the R
users, but since I just strated using it I have some problems....

I have a data.frame with a field called "razred". This field has
values from 1 up to 15.

Is it possible to create a for loop that would create a new data frame
for each of the "razred" values.

The R-way would be to use the split function and leave the result in a
list to
which the same operation could be also repeatedly performed using
lapply.

?split

And take a look at the fourth example applying split to the builtin
airqualitydataframe.

The plyr package also provides functions on dataframes.

--

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.




  [[alternative HTML version deleted]]

______________________________________________
R-help@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.

______________________________________________
R-help@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.

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.

Reply via email to