Martin Tomko
2010-Sep-21 20:00 UTC
[R] multiplying values in data frame by corresponding value in the first column
I am sure there is a simple solution to this... I have a column in a data frame specifying a grouping (1, -1) for my observations, and need to mutliply each observation in all the other columns of the data frame by the corresponding value in the given column. I played with apply, and saw some suggestions for sweep, but did not manage to get it working. My table contains NAs.... Example of table as data frame Observation Group Param1 Param2 AA 1 3 4 BB -1 5 6 Expected result: Observation Group Param1 Param2 AA 1 3 4 BB -1 -5 -6 group<-as.vector(table$Group) I extracted the first column into a vector, and am looking for a way to multiply each of the columns... SO far, only manual solutions (uglyyyy) work: table$Param1<-group*table$Param1 Thanks many times! Martin
Marc Schwartz
2010-Sep-21 20:24 UTC
[R] multiplying values in data frame by corresponding value in the first column
On Sep 21, 2010, at 3:00 PM, Martin Tomko wrote:> I am sure there is a simple solution to this... I have a column in a data frame specifying a grouping (1, -1) for my observations, and need to mutliply each observation in all the other columns of the data frame by the corresponding value in the given column. I played with apply, and saw some suggestions for sweep, but did not manage to get it working. > > My table contains NAs.... > > Example of table as data frame > Observation Group Param1 Param2 > AA 1 3 4 > BB -1 5 6 > > > Expected result: > Observation Group Param1 Param2 > AA 1 3 4 > BB -1 -5 -6 > > group<-as.vector(table$Group) > I extracted the first column into a vector, and am looking for a way to multiply each of the columns... SO far, only manual solutions (uglyyyy) work: table$Param1<-group*table$Param1 > > Thanks many times! > MartinOne approach is to use ?transform:> DFObservation Group Param1 Param2 1 AA 1 3 4 2 BB -1 5 6> transform(DF, Param1 = Param1 * Group, Param2 = Param2 * Group)Observation Group Param1 Param2 1 AA 1 3 4 2 BB -1 -5 -6 However, that is likely to get tedious with a large number of columns to the right of 'Group', presuming that your actual data may be wider than the above example. Thus, another approach may be: DF[, -c(1:2)] <- DF[, -c(1:2)] * DF$Group> DFObservation Group Param1 Param2 1 AA 1 3 4 2 BB -1 -5 -6 HTH, Marc Schwartz