我正在寻找一种通过R中的组号生成描述性统计数据的方法。我找到了另一个answer on here,它使用了dplyr,但是我遇到了太多问题而希望看到其他人可能推荐的替代品
我希望获得按group_id分组的收入的描述性统计信息。假设我有一个名为company的数据框:
group_id company revenue
1 Company A 200
1 Company B 150
1 Company C 300
2 Company D 600
2 Company E 800
2 Company F 1000
3 Company G 50
3 Company H 80
3 Company H 60
我想创建一个名为new_company的新数据框:
group_id company revenue average min max SD
1 Company A 200 217 150 300 62
1 Company B 150 217 150 300 62
1 Company C 300 217 150 300 62
2 Company D 600 800 600 1000 163
2 Company E 800 800 600 1000 163
2 Company F 1000 800 600 1000 163
3 Company G 50 63 50 80 12
3 Company H 80 63 50 80 12
3 Company H 60 63 50 80 12
同样,我正在寻找dplyr的替代品。谢谢
答案 0 :(得分:1)
使用样本数据框
dd<-read.csv(text="group_id,company,revenue
1,Company A,200
1,Company B,150
1,Company C,300
2,Company D,600
2,Company E,800
2,Company F,1000
3,Company G,50
3,Company H,80
3,Company H,60", header=T)
你可以做一些奇特的事情,比如使用ave()
来为不同的函数创建每行的所有值,然后将它与原始的data.frame结合起来。
ext <- with(dd, Map(function(x) ave(revenue, group_id, FUN=x),
list(avg=mean, min=min, max=max, SD=sd)))
cbind(dd, ext)
# group_id company revenue avg min max SD
# 1 1 Company A 200 216.66667 150 300 76.37626
# 2 1 Company B 150 216.66667 150 300 76.37626
# 3 1 Company C 300 216.66667 150 300 76.37626
# 4 2 Company D 600 800.00000 600 1000 200.00000
# 5 2 Company E 800 800.00000 600 1000 200.00000
# 6 2 Company F 1000 800.00000 600 1000 200.00000
# 7 3 Company G 50 63.33333 50 80 15.27525
# 8 3 Company H 80 63.33333 50 80 15.27525
# 9 3 Company H 60 63.33333 50 80 15.27525
但实际上简单的dplyr命令会更容易。
dd %>% group_by(group_id) %>%
mutate(
avg=mean(revenue),
min=min(revenue),
max=max(revenue),
SD=sd(revenue))
答案 1 :(得分:0)
我要使用的另一个功能是:来自“ psych”包的describeBy。
library(psych)
description <- describeBy(data.frame$variable_to_be_described, df$group_variable)