使用R中的权重创建降价频率表

时间:2015-02-27 14:16:04

标签: r

假设我有一些看起来像这样的数据:

df1 = data.frame(id=c("A1","A2","A3","A4"), 
                 variable=as.factor(c("black", "black", "blue", "no answer")),
                 weight=c(3,3,4,2))

我想创建一个考虑到权重的降价表。现在我正在做以下事情:

library(knitr)
kable(as.data.frame(table(df1$variable)/nrow(df1)), format = "markdown")

在没有考虑权重的情况下给出了相对频率。除了使用权重之外,我还希望以绝对频率向表中添加一列。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用此解决方案:

d <- aggregate(weight~variable,df1,sum) # calculate occurences

d$freqs <- d$weight/sum(d$weight) # calculate freqs

kable(d)

输出结果为:

|variable  | weight|     freqs|
|:---------|------:|---------:|
|black     |      6| 0.5000000|
|blue      |      4| 0.3333333|
|no answer |      2| 0.1666667|

[<强>更新

或者,您可以使用dplyr包:

library(dplyr)

df1 %>% 
    group_by(variable) %>%
    summarise(abs.freqs=sum(weight)) %>%
    mutate(freqs=abs.freqs/sum(df1$weight)) %>%
    kable()

它的语法更加冗长,但每一步都是自我解释的(%&gt;%是一个管道运算符,它使用左侧的表达式作为右侧表达式的第一个参数)。 输出是:

|variable  | abs.freqs|     freqs|
|:---------|---------:|---------:|
|black     |         6| 0.5000000|
|blue      |         4| 0.3333333|
|no answer |         2| 0.1666667|