R使用dplyr group_by / sum for循环,作为连接列表输出
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R使用dplyr group_by / sum for循环,作为连接列表输出相关的知识,希望对你有一定的参考价值。
我正在使用dplyr软件包对一周变量进行分组,并获得三个变量的总和。输出应相互连接。这是我的数据框df:
week var1 var2 var3
1 1 2 3
1 2 2 3
2 4 4 5
2 2 2 6
3 6 6 6
3 4 4 4
我的命令是
calculate <- function(vars){
x <- df %>% group_by(week) %>% summarise(summe = sum(vars))%>%mutate(group = paste(vars))
x
}
cols <- c("var1", "var2", "var3")
for (i in 1:length(cols)){
var <- cols[i]
cal <- calculate(var)
total <- rbind(total,cal)
}
预期输出应为
week summe group
1 3 var1
2 6 var1
3 10 var1
1 4 var2
2 6 var2
3 10 var2
1 6 var3
2 11 var3
3 10 var3
我的问题是:有没有比使用for循环更好的方法了?
干杯,安迪
答案
[我们可以将其设置为'long'格式,然后按'sum'进行分组]
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = starts_with('var'), names_to = 'group') %>%
group_by(week, group) %>%
summarise(summe = sum(value)) %>%
ungroup %>%
arrange(group) %>%
select(week, summe, group)
# A tibble: 9 x 3
# week summe group
# <int> <int> <chr>
#1 1 3 var1
#2 2 6 var1
#3 3 10 var1
#4 1 4 var2
#5 2 6 var2
#6 3 10 var2
#7 1 6 var3
#8 2 11 var3
#9 3 10 var3
数据
df <- structure(list(week = c(1L, 1L, 2L, 2L, 3L, 3L), var1 = c(1L,
2L, 4L, 2L, 6L, 4L), var2 = c(2L, 2L, 4L, 2L, 6L, 4L), var3 = c(3L,
3L, 5L, 6L, 6L, 4L)), class = "data.frame", row.names = c(NA,
-6L))
以上是关于R使用dplyr group_by / sum for循环,作为连接列表输出的主要内容,如果未能解决你的问题,请参考以下文章
R语言dplyr包使用group_by函数和summarise函数构建频率表实战
在 R 中使用 dplyr 在 group_by 之后应用自定义函数
在 dplyr 中使用 group_by 时在 R 中格式化数字 [重复]
如何使用 R 和 dplyr 中连续的元素执行 group_by
R语言dplyr包使用group_by函数arrange函数和filter函数获取每个分组的第一个第N个最后一个记录实战
R语言dplyr包获取dataframe分组聚合汇总统计值实战(group_by() and summarize() ):均值中位数分位数IQRMADcountunique