• http://www.mxysw.com
  • 楼主: tylerma3223
    95 2

    [有偿编程] R语言的dcast语句怎么才能求加权平均 [推广有奖]

    • 0关注
    • 13粉丝

    副教授

    85%

    还不是VIP/贵宾

    -

    威望
    1
    论坛币
    62055 个
    学术水平
    42 点
    热心指数
    72 点
    信用等级
    44 点
    经验
    19841 点
    帖子
    514
    精华
    0
    在线时间
    756 小时
    注册时间
    2013-1-28
    最后登录
    2018-1-22

    楼主
    tylerma3223 学生认证  发表于 2018-1-15 20:28:30 |只看作者 |倒序
    100论坛币
    原计划用melt和dcast来实现,但是dcast只有mean,没有加权平均的功能?  怎么办呢?

    附件是各个银行的单独数据,例如我想求五大行的合并数据,在文件里是top5==1的。
    五大行的 存款贷款比率( loan_depo_ratio_n) 求平均数时用 存款总额( total_deposit_n) 加权。
    五大行的 不良贷款比率( npl_ratio_n) 求平均数时用 贷款总额( total_loan_n) 加权。


    请问这个功能怎么实现?


    da02.rar (62.24 KB)

    最佳答案

    cheetahfly 查看完整内容

    我用tidyverse包+weighted.mean()实现,不知是不是你想要的: 结果如下: 注:我第二个变量的权重选错了,请你自己更正一下。
    关键词:CAS R语言 Deposit ratio Total
    支持楼主:购买VIP购买贵宾 购买后,论坛将奖励 10 元论坛资金给楼主,以表示您对TA发好贴的支持
     
    载入中......
    stata SPSS
    沙发
    cheetahfly 在职认证  发表于 2018-1-15 20:28:31 |只看作者
    本帖最后由 cheetahfly 于 2018-1-16 08:00 编辑

    我用tidyverse包+weighted.mean()实现,不知是不是你想要的:
    1. library(tidyverse)
    2. library(lubridate)

    3. a <- read.csv("da02.csv", header = TRUE, stringsAsFactors = FALSE) %>%
    4.   tbl_df() %>%
    5.   mutate_at(vars(datetime, ipodate), .funs = as_date)

    6. a %>%
    7.   filter(top5 == 1) %>%
    8.   group_by(datetime) %>%
    9.   summarise(W_loan_depo_ratio_n = weighted.mean(loan_depo_ratio_n, total_deposit_n, na.rm = TRUE),
    10.             W_npl_ratio_n = weighted.mean(npl_ratio_n, total_deposit_n, na.rm = TRUE))
    复制代码
    结果如下:
    weighted.PNG
    注:我第二个变量的权重选错了,请你自己更正一下。

    藤椅
    tylerma3223 学生认证  发表于 2018-1-16 14:10:46 |只看作者
    cheetahfly 发表于 2018-1-15 22:12
    我用tidyverse包+weighted.mean()实现,不知是不是你想要的:
    结果如下:
    多谢您。
    变量是哪个都无所谓,道理都一样,我试验一下,看看是否可行。
    您需要登录后才可以回帖 登录 | 我要注册

    GMT+8, 2018-1-23 02:06
    沈北新区论坛 讷河镇论坛 陕县论坛 参内乡论坛 南晓镇论坛
    宣武区论坛 宜兰市论坛 宁河县论坛 江浦论坛 台北县论坛