2013-06-11 34 views
6

Tôi có một khung dữ liệu, nói biên chế, như:Tại sao tôi thấy "Lỗi: độ dài (hàng) == 1 không phải là TRUE" với ddply?

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) 

Các "NumRate" thực sự là số:

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

Và tôi muốn để có được một biết max, min và có ý nghĩa tiền lương của PayBasis. Tôi hy vọng điều này để làm việc:

ddply(payroll, "PayBasis", summarize) 

Nhưng thay vào đó tôi nhận được một lỗi: Error: length(rows) == 1 is not TRUE

tôi đang thiếu gì ở đây?

Trả lời

3

Có thể vì bạn đã nhầm summarize cho summary (không hoạt động như bạn mong đợi trong ngữ cảnh này). Có thể bạn muốn:

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 

Và hãy chắc chắn để xem xét cẩn thận hơn trong các ví dụ trong ?summarize?ddply.