Quantcast

Apply a function according to factor levels.

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Apply a function according to factor levels.

li li-13
Dear all,
   I have a question on applying a function to the data according to factor
levels.
For example, for the data below, what is the best way to apply a function
to
"values" according to different levels of "samples" (1,2,3,4,5)?
    values ind sample
1  0.03325   1      1
2  0.03305   1      1
3  0.03185   1      1
4  0.03515   1      1
5  0.03375   1      1
6  0.01180   1      2
7  0.01850   1      3
8  0.02915   1      4
9  0.06200   1      5
10 0.03230   2      1
11 0.03345   2      1
12 0.03385   2      1
13 0.03605   2      1
14 0.03225   2      1
15 0.01145   2      2
16 0.01805   2      3
17 0.02950   2      4
18 0.05995   2      5
19 0.03425   3      1
20 0.03575   3      1
21 0.03535   3      1
22 0.03380   3      1
23 0.03410   3      1
24 0.01050   3      2
25 0.01735   3      3
26 0.03140   3      4
27 0.06170   3      5
28 0.03430   4      1
29 0.03185   4      1
30 0.03165   4      1
31 0.03380   4      1
32 0.03235   4      1
33 0.01100   4      2
34 0.01825   4      3
35 0.03045   4      4
36 0.06060   4      5
37 0.03280   5      1
38 0.03350   5      1
39 0.03215   5      1
40 0.03545   5      1
41 0.03285   5      1
42 0.01085   5      2
43 0.01660   5      3
44 0.03060   5      4
45 0.06605   5      5


   Thank you.
      Hannah

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Apply a function according to factor levels.

David Carlson
?tapply

----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352


> -----Original Message-----
> From: [hidden email] [mailto:r-help-bounces@r-
> project.org] On Behalf Of li li
> Sent: Thursday, August 16, 2012 8:31 PM
> To: r-help
> Subject: [R] Apply a function according to factor levels.
>
> Dear all,
>    I have a question on applying a function to the data according to
> factor
> levels.
> For example, for the data below, what is the best way to apply a
> function
> to
> "values" according to different levels of "samples" (1,2,3,4,5)?
>     values ind sample
> 1  0.03325   1      1
> 2  0.03305   1      1
> 3  0.03185   1      1
> 4  0.03515   1      1
> 5  0.03375   1      1
> 6  0.01180   1      2
> 7  0.01850   1      3
> 8  0.02915   1      4
> 9  0.06200   1      5
> 10 0.03230   2      1
> 11 0.03345   2      1
> 12 0.03385   2      1
> 13 0.03605   2      1
> 14 0.03225   2      1
> 15 0.01145   2      2
> 16 0.01805   2      3
> 17 0.02950   2      4
> 18 0.05995   2      5
> 19 0.03425   3      1
> 20 0.03575   3      1
> 21 0.03535   3      1
> 22 0.03380   3      1
> 23 0.03410   3      1
> 24 0.01050   3      2
> 25 0.01735   3      3
> 26 0.03140   3      4
> 27 0.06170   3      5
> 28 0.03430   4      1
> 29 0.03185   4      1
> 30 0.03165   4      1
> 31 0.03380   4      1
> 32 0.03235   4      1
> 33 0.01100   4      2
> 34 0.01825   4      3
> 35 0.03045   4      4
> 36 0.06060   4      5
> 37 0.03280   5      1
> 38 0.03350   5      1
> 39 0.03215   5      1
> 40 0.03545   5      1
> 41 0.03285   5      1
> 42 0.01085   5      2
> 43 0.01660   5      3
> 44 0.03060   5      4
> 45 0.06605   5      5
>
>
>    Thank you.
>       Hannah
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Apply a function according to factor levels.

Rui Barradas
Hello,

Or ?aggregate, depending on the wanted output. With the dataset provided
by the op, apply function mean.

dat <- read.table(text="
  values ind sample
1  0.03325   1      1
2  0.03305   1      1
3  0.03185   1      1
[...etc...]
44 0.03060   5      4
45 0.06605   5      5
", header = TRUE)

tapply(dat$values, dat$sample, mean)  # named vector
        1        2        3        4        5
0.033556 0.011120 0.017750 0.030220 0.062060

aggregate(values ~ sample, data = dat, mean)  # data.frame
   sample   values
1      1 0.033556
2      2 0.011120
3      3 0.017750
4      4 0.030220
5      5 0.062060

Hope this helps,

Rui Barradas

Em 17-08-2012 02:41, David L Carlson escreveu:

> ?tapply
>
> ----------------------------------------------
> David L Carlson
> Associate Professor of Anthropology
> Texas A&M University
> College Station, TX 77843-4352
>
>
>> -----Original Message-----
>> From: [hidden email] [mailto:r-help-bounces@r-
>> project.org] On Behalf Of li li
>> Sent: Thursday, August 16, 2012 8:31 PM
>> To: r-help
>> Subject: [R] Apply a function according to factor levels.
>>
>> Dear all,
>>     I have a question on applying a function to the data according to
>> factor
>> levels.
>> For example, for the data below, what is the best way to apply a
>> function
>> to
>> "values" according to different levels of "samples" (1,2,3,4,5)?
>>      values ind sample
>> 1  0.03325   1      1
>> 2  0.03305   1      1
>> 3  0.03185   1      1
>> 4  0.03515   1      1
>> 5  0.03375   1      1
>> 6  0.01180   1      2
>> 7  0.01850   1      3
>> 8  0.02915   1      4
>> 9  0.06200   1      5
>> 10 0.03230   2      1
>> 11 0.03345   2      1
>> 12 0.03385   2      1
>> 13 0.03605   2      1
>> 14 0.03225   2      1
>> 15 0.01145   2      2
>> 16 0.01805   2      3
>> 17 0.02950   2      4
>> 18 0.05995   2      5
>> 19 0.03425   3      1
>> 20 0.03575   3      1
>> 21 0.03535   3      1
>> 22 0.03380   3      1
>> 23 0.03410   3      1
>> 24 0.01050   3      2
>> 25 0.01735   3      3
>> 26 0.03140   3      4
>> 27 0.06170   3      5
>> 28 0.03430   4      1
>> 29 0.03185   4      1
>> 30 0.03165   4      1
>> 31 0.03380   4      1
>> 32 0.03235   4      1
>> 33 0.01100   4      2
>> 34 0.01825   4      3
>> 35 0.03045   4      4
>> 36 0.06060   4      5
>> 37 0.03280   5      1
>> 38 0.03350   5      1
>> 39 0.03215   5      1
>> 40 0.03545   5      1
>> 41 0.03285   5      1
>> 42 0.01085   5      2
>> 43 0.01660   5      3
>> 44 0.03060   5      4
>> 45 0.06605   5      5
>>
>>
>>     Thank you.
>>        Hannah
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> [hidden email] 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.
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Apply a function according to factor levels.

arun kirshna
In reply to this post by li li-13
Hi,
Try this:
dat1<-read.table(text="
 no.   values ind sample
1  0.03325  1      1
2  0.03305  1      1
3  0.03185  1      1
4  0.03515  1      1

-------------------------
-------------------------
42 0.01085  5      2
43 0.01660  5      3
44 0.03060  5      4
45 0.06605  5      5
",sep="",header=TRUE)
dat2<-within(dat1,{sample<-as.factor(sample)})
ddply(dat2,.(sample), function(x) mean(x$values))
# sample       V1
#1      1 0.033556
#2      2 0.011120
#3      3 0.017750
#4      4 0.030220
#5      5 0.062060
A.K.

----- Original Message -----
From: li li <[hidden email]>
To: r-help <[hidden email]>
Cc:
Sent: Thursday, August 16, 2012 9:31 PM
Subject: [R] Apply a function according to factor levels.

Dear all,
   I have a question on applying a function to the data according to factor
levels.
For example, for the data below, what is the best way to apply a function
to
"values" according to different levels of "samples" (1,2,3,4,5)?
    values ind sample
1  0.03325   1      1
2  0.03305   1      1
3  0.03185   1      1
4  0.03515   1      1
5  0.03375   1      1
6  0.01180   1      2
7  0.01850   1      3
8  0.02915   1      4
9  0.06200   1      5
10 0.03230   2      1
11 0.03345   2      1
12 0.03385   2      1
13 0.03605   2      1
14 0.03225   2      1
15 0.01145   2      2
16 0.01805   2      3
17 0.02950   2      4
18 0.05995   2      5
19 0.03425   3      1
20 0.03575   3      1
21 0.03535   3      1
22 0.03380   3      1
23 0.03410   3      1
24 0.01050   3      2
25 0.01735   3      3
26 0.03140   3      4
27 0.06170   3      5
28 0.03430   4      1
29 0.03185   4      1
30 0.03165   4      1
31 0.03380   4      1
32 0.03235   4      1
33 0.01100   4      2
34 0.01825   4      3
35 0.03045   4      4
36 0.06060   4      5
37 0.03280   5      1
38 0.03350   5      1
39 0.03215   5      1
40 0.03545   5      1
41 0.03285   5      1
42 0.01085   5      2
43 0.01660   5      3
44 0.03060   5      4
45 0.06605   5      5


   Thank you.
      Hannah

    [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.


______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Apply a function according to factor levels.

li li-13
Got it. Thanks so much.
   Hannah

2012/8/16 arun <[hidden email]>

> Hi,
> Try this:
> dat1<-read.table(text="
>  no.   values ind sample
> 1  0.03325  1      1
> 2  0.03305  1      1
> 3  0.03185  1      1
> 4  0.03515  1      1
>
> -------------------------
> -------------------------
> 42 0.01085  5      2
> 43 0.01660  5      3
> 44 0.03060  5      4
> 45 0.06605  5      5
> ",sep="",header=TRUE)
> dat2<-within(dat1,{sample<-as.factor(sample)})
> ddply(dat2,.(sample), function(x) mean(x$values))
> # sample       V1
> #1      1 0.033556
> #2      2 0.011120
> #3      3 0.017750
> #4      4 0.030220
> #5      5 0.062060
> A.K.
>
> ----- Original Message -----
> From: li li <[hidden email]>
> To: r-help <[hidden email]>
> Cc:
> Sent: Thursday, August 16, 2012 9:31 PM
> Subject: [R] Apply a function according to factor levels.
>
>  Dear all,
>    I have a question on applying a function to the data according to factor
> levels.
> For example, for the data below, what is the best way to apply a function
> to
> "values" according to different levels of "samples" (1,2,3,4,5)?
>     values ind sample
> 1  0.03325   1      1
> 2  0.03305   1      1
> 3  0.03185   1      1
> 4  0.03515   1      1
> 5  0.03375   1      1
> 6  0.01180   1      2
> 7  0.01850   1      3
> 8  0.02915   1      4
> 9  0.06200   1      5
> 10 0.03230   2      1
> 11 0.03345   2      1
> 12 0.03385   2      1
> 13 0.03605   2      1
> 14 0.03225   2      1
> 15 0.01145   2      2
> 16 0.01805   2      3
> 17 0.02950   2      4
> 18 0.05995   2      5
> 19 0.03425   3      1
> 20 0.03575   3      1
> 21 0.03535   3      1
> 22 0.03380   3      1
> 23 0.03410   3      1
> 24 0.01050   3      2
> 25 0.01735   3      3
> 26 0.03140   3      4
> 27 0.06170   3      5
> 28 0.03430   4      1
> 29 0.03185   4      1
> 30 0.03165   4      1
> 31 0.03380   4      1
> 32 0.03235   4      1
> 33 0.01100   4      2
> 34 0.01825   4      3
> 35 0.03045   4      4
> 36 0.06060   4      5
> 37 0.03280   5      1
> 38 0.03350   5      1
> 39 0.03215   5      1
> 40 0.03545   5      1
> 41 0.03285   5      1
> 42 0.01085   5      2
> 43 0.01660   5      3
> 44 0.03060   5      4
> 45 0.06605   5      5
>
>
>    Thank you.
>       Hannah
>
>     [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
>  PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Loading...