在循环中使用 dplyr 总结几个 data.frame 变量
Using dplyr within a loop to summarise several data.frame variables
我想总结 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
但 none 有效。
我很确定这是一个糟糕的编码技巧问题,但这就是我到目前为止想到的全部内容。这是我尝试做的一个例子:
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,但对我的情况没有太大帮助。
提前致谢。
您可以使用 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)
)
您可以使用 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)))
我想总结 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
但 none 有效。
我很确定这是一个糟糕的编码技巧问题,但这就是我到目前为止想到的全部内容。这是我尝试做的一个例子:
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,但对我的情况没有太大帮助。
提前致谢。
您可以使用 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)
)
您可以使用 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)))