[R] Subset and 0 replace?

Duncan Murdoch murdoch.duncan at gmail.com
Thu May 21 01:30:04 CEST 2015


On 20/05/2015 7:13 PM, Vin Cheng wrote:
> Hi,
>  
> I'm trying to group rows in a dataframe with SPCLORatingValue factor >16 and summing the Wgt's that correspond to this condition.  There are 100 dataframes in a list.  
>  
> Some of the dataframes won't have any rows that have this condition SPCLORatingValue>16 and therefore no corresponding weight.  
>  
> My problem is that I need to have a corresponding value for each dataframe in the list - so 100 values. 
>  
> If dataframe 44 doesn't have any SPCLORatingValue>16, then I end up getting a vector that's 99 long vs. 100.  putting value 45 into 44's slot and so on.
>  
> Is there either an if/else statement or argument I can place into subset to put a 0 for the data frames that don't have SPCLORatingValue>16?
>  
> GenEval[18,1:100] <- t(summaryBy(Wgt.sum~as.numeric(.id),data=subset(ldply(Generation,function(x) summaryBy(Wgt ~ SPCLORatingValue, data=x, FUN=c(sum))),SPCLORatingValue>16),FUN=c(sum),order=FALSE))
>  

The summaryBy function is not in base R.  There's a function with that
name in the doBy package; is that the one you're using?

You doing say how to do the grouping, and I can't read your code to
figure it out, but this code will do what you want with suitable inputs:

by(df, group, function(subset) with(subset, sum(Wgt[SPCLORatingValue >
16])))

where df is your dataframe, and group is a variable that defines the groups.

Duncan Murdoch



More information about the R-help mailing list