Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Frequency tables with weighted data in R

I need to calculate the frequency of individuals by age and marital status so normally I'd use:

    table(age, marital_status)

However each individual has a different weight after the sampling of the data. How do I incorporate this into my frequency table?

like image 767
user2568648 Avatar asked Sep 03 '13 06:09

user2568648


2 Answers

You can use function svytable from package survey, or wtd.table from rgrs.

EDIT : rgrs is now called questionr :

df <- data.frame(var = c("A", "A", "B", "B"), wt = c(30, 10, 20, 40))

library(questionr)
wtd.table(x = df$var, weights = df$wt)
#  A  B 
# 40 60

That's also possible with dplyr :

library(dplyr)
count(x = df, var, wt = wt)
# # A tibble: 2 x 2
#        var     n
#     <fctr> <dbl>
#   1      A    40
#   2      B    60
like image 109
Victorp Avatar answered Sep 16 '22 14:09

Victorp


Just for the sake of completeness, using base R:

df <- data.frame(var = c("A", "A", "B", "B"), wt = c(30, 10, 20, 40))

aggregate(x = list("wt" = df$wt), by = list("var" = df$var), FUN = sum)

var wt
1 A 40
2 B 60

Or with the less cumbersome formula notation:

aggregate(wt ~ var, data = df, FUN = sum)

var wt
1 A 40
2 B 60

like image 38
Sicabí Avatar answered Sep 19 '22 14:09

Sicabí