【问题标题】:Using dplyr within a loop to summarise several data.frame variables在循环中使用 dplyr 来总结几个 data.frame 变量
【发布时间】:2017-03-06 19:33:06
【问题描述】:

我想总结 data.frame 中的几列。分组和汇总是通过dplyr实现的,如下例所示。

df = data.frame (time = rep(c("day", "night"), 10) , 
    who =rep(c("Paul", "Simon"), each=10) , 
    var1 = runif(20, 5, 15), var2 = runif(20, 10, 12), var3 = runif(20, 2, 7), var4 = runif(20, 1, 3)) 

编写我需要的函数

quantil_x = function (var, num) { quantile(var, num, na.rm=T) }

var1 使用它并导出

percentiles = df %>% group_by(time, who) %>% summarise(
    P0 = quantil_x (var1, 0),
    P25 = quantil_x (var1, .25),
    P75 = quantil_x (var1, .75)
    )
write.table(percentiles, file = "summary_var1.csv",row.names=FALSE, dec=",",sep=";")

我想要对'var2''var3''var4' 重复同样的任务。我试图运行一个循环但没有成功多次执行此任务。不幸的是,我找不到一种方法来处理代码中不同的变量调用。也就是说,在循环中我尝试使用summarise_(),尝试在函数quantil_x()summarise 中使用get(),还有as.name,但这些都不起作用。

我很确定这是一个糟糕的编码技能问题,但这就是我目前想出的全部。这是我尝试做的一个示例:

list = c("var1", "var2", "var3", "var4")
for (i in list){
percentiles = df %>% group_by(time, who) %>% summarise(
    P0 = quantil_x (get(i), 0),
    P25 = quantil_x (get(i), .25),
    P75 = quantil_x (get(i), .75)
    )
write.table(percentiles, file = paste0("summary_",i,".csv",row.names=FALSE, dec=",",sep=";")
}

我读了这个post,但对我的案子没有多大帮助。

提前致谢。

【问题讨论】:

    标签: r loops dplyr nse


    【解决方案1】:

    您可以通过summarise_each() 做到这一点

    df %>% 
     group_by(time, who) %>% 
     summarise_each(funs (`0` = quantile(., 0, na.rm=T),
                          `25`= quantile(., .25, na.rm = T),
                          `75`= quantile(., .75, na.rm = T)))
    

    【讨论】:

    • 谢谢,我不知道有人可以像这样使用.
    【解决方案2】:

    您可以通过gather() 做到这一点

    percentiles = df %>%
    gather(Var,Value,var1,var2,var3) %>%
     group_by(Var,time, who) %>%
     summarise(
        P0 = quantil_x (Value, 0),
        P25 = quantil_x (Value, .25),
        P75 = quantil_x (Value, .75)
        )
    

    【讨论】:

    • 这种方法的优点是创建的行多于列。此外,它对行的排序比另一种对列的排序更合乎逻辑。
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2021-10-02
    • 2014-02-13
    • 1970-01-01
    • 2023-02-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多