在循环中使用dplyr来汇总几个data.frame变量

时间:2017-03-06 19:33:07

标签: r loops dplyr nse

我想总结一下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_(),尝试在函数get()内或quantil_x()内使用summarise,也使用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,但对我的情况没有多大帮助。

提前致谢。

2 个答案:

答案 0 :(得分:4)

您可以使用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)))

答案 1 :(得分:1)

您可以使用 0 1 0 abc 0 1 0 2 123 1 3 0 4 r 0 5 . 0 6 0 7 0 8 a 0

执行此操作
gather()