Why am I seeing "Error: length(rows) == 1 is not TRUE" with ddply?

Amanda picture Amanda · Jun 11, 2013 · Viewed 23.9k times · Source

I have a data frame, say payroll, like:

payroll <- read.table(text="
AgencyName          Rate             PayBasis     Status    NumRate
HousingAuthority    $26,843.00   Annual           Full-Time 26843.00
HousingAuthority    $14,970.00   ProratedAnnual   Part-Time 14970.00
HousingAuthority    $26,843.00   Annual           Full-Time 26843.00
HousingAuthority    $14,970.00   ProratedAnnual   Part-Time 14970.00
HousingAuthority    $13.50           Hourly           Part-Time 13.50
HousingAuthority    $14,970.00   ProratedAnnual   Part-Time 14970.00
HousingAuthority    $26,843.00   Annual           Full-Time 26843.00", header = TRUE)

The "NumRate" is actually numeric:

payroll$NumRate <- as.numeric(payroll$NumRate)

And I'd like to get a know the max, min and mean salaries by PayBasis. I expect this to work:

ddply(payroll, "PayBasis", summarize)

But instead I'm getting an error: Error: length(rows) == 1 is not TRUE

What am I missing here?

Answer

joran picture joran · Jun 11, 2013

Probably because you've mistaken summarize for summary (which won't work like you expect in this context). You probably wanted:

ddply(payroll, "PayBasis", summarize,mx = max(NumRate),mn = min(NumRate),avg = mean(NumRate))
        PayBasis      mx      mn     avg
1         Annual 26843.0 26843.0 26843.0
2         Hourly    13.5    13.5    13.5
3 ProratedAnnual 14970.0 14970.0 14970.0

And be sure to look more carefully at the examples in ?summarize and ?ddply.