R - 频率分布的中位数,按另一个变量分组

时间:2016-05-03 02:46:36

标签: r grouping median

我的数据集如下所示:http://i.imgur.com/OdiLf4t.png

姓名|国家|邮编| County_name |平均付款|频率

我希望的输出是按州分组,并使用平均付款和频率列进行中位数付款。

我知道如何为整个数据集

执行此操作
median(rep(Clean$medicare_average_payment, Clean$Frequency))        

但不确定国家如何做到这一点 谢谢

2 个答案:

答案 0 :(得分:1)

我们可以尝试dplyr

library(dplyr)    
Clean1 <- Clean[rep(1:nrow(Clean), Clean$Frequency),]
Clean1 %>%
      group_by(State) %>%
      summarise(Median = median(medicare_average_payment))

或使用data.table

library(data.table)
setDT(Clean)[, .(Median = median(rep(medicare_average_payment, Frequency))) , State]

答案 1 :(得分:1)

您可以使用by拆分数据框并对每个部分执行此功能:

by(Clean, Clean$State, 
   FUN=function(x) median(rep(x$medicare_average_payment, x$Frequency))
)