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]]
?tapply ---------------------------------------------- David L Carlson Associate Professor of Anthropology Texas A&M University College Station, TX 77843-4352> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at 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]] > > ______________________________________________ > 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.
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: r-help-bounces at r-project.org [mailto:r-help-bounces at 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]] >> >> ______________________________________________ >> 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. > ______________________________________________ > 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, 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 <hannah.hlx at gmail.com> To: r-help <r-help at r-project.org> 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]] ______________________________________________ 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.