【问题标题】:Better coding practice: loop using dplyr to produce summary stats更好的编码实践:使用 dplyr 循环生成汇总统计信息
【发布时间】:2018-10-19 10:34:18
【问题描述】:

我有 2 个要总结的变量,我正在努力在 R 中循环。我想按年份对变量进行分组,然后总结这两个变量:R_D$Returns$。我的代码在下面...我将如何执行循环而不是编写两次代码?

R_D 的选择总结

 R_DYear<- df %>% group_by(Year) %>%
   do(data.frame(as.list(summary(.$`R_D$`)), check.names = FALSE))

 ds2 <-df %>%
   group_by(Year) %>%
   summarise( sum=sum(`R_D$`), sd=sd(`R_D$`))  
 R_DYear<- R_DYear%>% left_join(ds2)

通过选择返回摘要

 Returs_Year<- df %>% group_by(Year) %>%
 do(data.frame(as.list(summary(.$`Returns$`)), check.names = FALSE))

 ds3 <-df %>%
   group_by(Year) %>%
   summarise( sum=sum(`Returns$`), sd=sd(`Returns$`))  
 Returs_Year<- Returs_Year %>% left_join(ds3)

下面是 RD_Year 输出的一个小例子

 Year   Min.    1st Qu. Median  Mean    3rd Qu. Max.    sum      sd
 2006     0      0.0    1.2     15.5    16.0    161.0   730.2   31.6
 2007     0      0.0    0.9     20.8    18.1    213.9   976.2   45.0
 2008     0      0.0    2.2     30.2    20.1    361.4   1418.6  72.9

【问题讨论】:

    标签: r loops dplyr statistics


    【解决方案1】:

    数据

    df = data.frame(year = 1:4, replicate(2,sample(0:20,20,rep=TRUE)))
    col = c("R_D","Returns" )
    colnames(df)[2:3] <- col
    

    这是一个使用聚合的方法

    历年研发总结

    aggregate(df[, c("R_D")] , df["year"], FUN = function(x) c(summary(x), sum = sum(x), sd = sd(x)))
    

    年度回报汇总

    aggregate(df[, c("Returns")] , df["year"], FUN = function(x) c(summary(x), sum = sum(x), sd = sd(x)))
    

    编辑1

    df1 = aggregate(x= df[, c("R_D","Returns")] , df["year"], FUN = function(x) c(summary(x), sum = sum(x), sd = sd(x)))
    R_D = as.data.frame(cbind(Year = df1$year, df1$R_D))
    Returns = as.data.frame(cbind(Year = df1$year, df1$Returns))
    

    【讨论】:

    • ,能否实现代码直接输出到数据框中?
    猜你喜欢
    • 2019-12-30
    • 1970-01-01
    • 2021-08-03
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    相关资源
    最近更新 更多