2017-02-28 3 views
-1

Ich möchte diesen Datenrahmen aggregieren, wo für jede Family Size, gibt es sechs Kategorien, von Hours Worked.Aggregate Columns durch mehrere Bedingungen

families <- structure(list(`Family Size` = c(2L, 2L, 2L, 2L, 2L, 2L, 2L,13L, 13L, 13L), HoursLess20 = c("1,014", "1,041", "11", "3","1", "2", "1", "0", "0", "0"), Hours2024 = c(7L, 298L, 1L, 0L,0L, 0L, 0L, 0L, 0L, 0L), Hours2529 = c(1L, 34L, 0L, 0L, 0L, 0L,0L, 0L, 0L, 0L), Hours3034 = c(6L, 44L, 1L, 0L, 0L, 0L, 0L, 0L,0L, 0L), Hours3539 = c(4L, 46L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Hours40plus = c(9L, 128L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), .Names = c("Family Size","HoursLess20", "Hours2024", "Hours2529", "Hours3034", "Hours3539","Hours40plus"), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 1977L,1978L, 1979L), class = "data.frame") 
+0

Wie möchten Sie sie aggregiert? Die Summe? Der Durchschnitt? – G5W

Antwort

1

Zunächst einmal haben Sie derzeit die Werte in HoursLess20 als Strings (wegen des Kommas). Um irgendeine Art von numerischen Aggregationen zu machen, wollen Sie die Kommas loswerden und diese in numerische konvertieren.

families$HoursLess20 = as.numeric(gsub(",", "", families$HoursLess20)) 

Sobald Sie getan haben, dass Sie nur die Aggregatfunktion verwenden können zu schaffen, was Aggregat Sie wollen.

## Sum 
aggregate(families[,-1], list(families[,1]), sum) 
    Group.1 HoursLess20 Hours2024 Hours2529 Hours3034 Hours3539 Hours40plus 
1  2  2073  306  35  51  50   138 
2  13   0   0   0   0   0   0 

## Average 
aggregate(families[,-1], list(families[,1]), mean) 
    Group.1 HoursLess20 Hours2024 Hours2529 Hours3034 Hours3539 Hours40plus 
1  2 296.1429 43.71429   5 7.285714 7.142857 19.71429 
2  13  0.0000 0.00000   0 0.000000 0.000000  0.00000 
+0

Ich weiß nicht, warum das passiert ist, es muss passiert sein, als ich es für SO reproduziert habe, aber danke. –