gpt4 book ai didi

r - 如何计算每列的滚动平均值

转载 作者:行者123 更新时间:2023-12-04 08:47:10 25 4
gpt4 key购买 nike

我想按组计算每列每五行的平均值,我试过:

name<-colnames(df[,4:10])

df1<-for (i in name){
df%>%
group_by(A)%>%
summarise(!!paste(i,"mean"):=rollapplyr(get(i),5,mean,fill = NA,by.column=T))
}
结果 df1 为 NULL
然后我试过:
for (i in name){
df%>%
group_by(A)%>%
mutate(!!paste(i,"mean"):=rollapplyr(get(i),5,mean,fill = NA,by.column=T))
}
这可以运行,但什么也没有发生,df 保持不变。如果我将上面的代码分配给 df1,df1 仍然是 NULL。
我也试过rollmean
df1<- for (i in name){
+ df%>%
+ group_by(CONM)%>%
+ mutate(!!paste(i,"mean"):=rollmean(get(i),5,fill = NA,align = "right"))
+ }
但仍然得到NULL。
我的数据是这样的:
CONM    A  B   C
a 1 2 3
a 2 3 4
a 3 4 5
a 4 5 6
a 5 6 7
a 6 7 8
我想为每个 CONM 得到这个结果:
CONM    A  B   C   A_mean  B_mean  C_mean
a 1 2 3 NA NA NA
a 2 3 4 NA NA NA
a 3 4 5 NA NA NA
a 4 5 6 NA NA NA
a 5 6 7 3 4 5
a 6 7 8 4 5 6
b 1 2 3 NA NA NA
有人可以帮我解决这个问题吗?我应该使用其他软件包吗?谢谢

最佳答案

我们可以使用 mutateacross

library(dplyr)
library(zoo)
df %>%
group_by(CONM) %>%
mutate(across(A:C, ~ rollmean(., 5, fill = NA, align = 'right'),
.names = '{col}_mean')) %>%
ungroup
-输出
# A tibble: 7 x 7
# CONM A B C A_mean B_mean C_mean
# <chr> <int> <int> <int> <dbl> <dbl> <dbl>
#1 a 1 2 3 NA NA NA
#2 a 2 3 4 NA NA NA
#3 a 3 4 5 NA NA NA
#4 a 4 5 6 NA NA NA
#5 a 5 6 7 3 4 5
#6 a 6 7 8 4 5 6
#7 b 1 2 3 NA NA NA

或者作为@G。格洛腾迪克提到, rollmeanr会做正确的对齐
df %>%
group_by(CONM) %>%
mutate(across(A:C, ~ rollmeanr(., 5, fill = NA), .names = '{col}_mean'))
数据
df <- structure(list(CONM = c("a", "a", "a", "a", "a", "a", "b"), A = c(1L, 
2L, 3L, 4L, 5L, 6L, 1L), B = c(2L, 3L, 4L, 5L, 6L, 7L, 2L), C = c(3L,
4L, 5L, 6L, 7L, 8L, 3L)), class = "data.frame", row.names = c(NA,
-7L))

关于r - 如何计算每列的滚动平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64253439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com