Hi > [R] How do I make proper use of the by() function? > > Dear list, > > I have a function that uses values from two vectors and spits out one new > vector based on all the values of the two original vectors, and with the > same length as them. > Ok, I would now like to be able to apply that function simply on two columns > in a data frame, divided by the levels of factors in the data frame. > > I'm trying to use by() for this, but the output is too hard to use. What I > am doing is this: > > by(df, list(df$Factor1,df$Factor2),function(x) > my_function(x$col1,x$col2),simplify=TRUE)
by(df, list(df$Factor1,df$Factor2),function(x) my_function(x$col1,x$col2),simplify=TRUE) Error in df$Factor1 : object of type 'closure' is not subsettable I get this kind of error which is because I do not have any df object other than df function from stats package. If I understand correctly you want maybe either aggregate or ave > milan pc lot bettong bet sira vyber betctc 1 1 56 89.95 109.25 3.000 b 88.37 2 2 66 86.87 100.96 3.156 a NA 3 3 84 93.91 101.21 3.120 a NA 4 4 89 89.48 100.00 3.010 a NA 5 5 41 110.15 116.92 3.597 b 106.37 6 6 44 96.53 106.54 3.057 b NA 7 7 47 94.94 104.91 2.857 b NA 8 8 62 90.30 111.05 3.210 b NA 9 9 64 96.41 102.56 3.180 a 90.79 10 10 65 95.04 101.15 3.200 a NA 11 11 57 88.27 104.71 3.060 b NA 12 13 74 91.98 104.93 3.470 a NA > aggregate(milan[,2:5], list(milan$vyber), sum) Group.1 lot bettong bet sira 1 a 442 553.69 610.81 19.136 2 b 307 570.14 653.38 18.781 > sapply(milan[,2:5], function(x) ave(x, milan$vyber, "sum")) lot bettong bet sira [1,] 51.16667 95.02333 108.8967 3.130167 [2,] 73.66667 92.28167 101.8017 3.189333 [3,] 73.66667 92.28167 101.8017 3.189333 [4,] 73.66667 92.28167 101.8017 3.189333 [5,] 51.16667 95.02333 108.8967 3.130167 [6,] 51.16667 95.02333 108.8967 3.130167 [7,] 51.16667 95.02333 108.8967 3.130167 [8,] 51.16667 95.02333 108.8967 3.130167 [9,] 73.66667 92.28167 101.8017 3.189333 [10,] 73.66667 92.28167 101.8017 3.189333 [11,] 51.16667 95.02333 108.8967 3.130167 [12,] 73.66667 92.28167 101.8017 3.189333 But maybe I am wrong, I still only try to learn mind reading. > > and the output is too complex to be used in a simple way. Actually, I just > want something like a data frame, where the results vectors are placed in > one column and the conditions under which they were produced (i.e. the > values of the factors according to which the data set were divided) in other > columns. > > This does not seem to be provided by by(), and aggregate only provides me > with the ability to use values from one column, right? > So, are there other functions I could use? > > Thanks! > > /Fredrik > > -- > "Life is like a trumpet - if you don't put anything into it, you don't get > anything out of it." > > [[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.