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.