gpt4 book ai didi

r - 通过对 r 中的另一列进行分组来求 n 行的平均值

转载 作者:行者123 更新时间:2023-12-02 03:58:30 26 4
gpt4 key购买 nike

我有一个数据框,我需要计算每 n 行的 x 平均值
通过对名称进行分组,假设 n= 3
示例数据集 df:

 Name     X  
A 3.1
A 2.5
A 3.6
A 3.4
B 4.6
B 1.8
B 3.4

对于每个名称,前 3 行的平均值,然后是接下来的 3 行,
如果名称最后 < 3 行,则意味着这 1 或 2 行。

到目前为止,我已经能够分别对 3 行或名称进行分组。
任何关于如何将这两者暗示在一起的帮助将不胜感激。

## by grouping 3 rows##
final1<-aggregate(df$X,list(rep(1(nrow(df)%/%n+1),each=n,len=nrow(df))),mean)[-1]

##by grouping name##
final2<- df %>% group_by(Name) %>% summarise(value=mean(df$X))

期望的输出是:

  Name      X     
A 3.066
A 3.400
B 3.266

感谢您的帮助!

最佳答案

我们可以使用row_number函数,同时也使用group_by来提出解决方案:

我们首先创建一个名为 row_num_mod 的变量,它采用 row_number mod 3。然后,我们可以按 row_num_modName 进行分组,以找出观察结果属于哪个实例。

我们可以再次使用row_number,这样我们实际上是对不同的值 mod 3 进行排序。

dat %>%
group_by(Name) %>%
mutate(row_num_mod = row_number() %% 3) %>%
ungroup() %>%
group_by(row_num_mod, Name) %>%
mutate(row_num2 = row_number()) %>% # which instance of x mod 3 is this?
ungroup() %>%
group_by(Name, row_num2) %>%
summarise(Mean = mean(X))

Name row_num2 Mean
<chr> <int> <dbl>
1 A 1 3.066667
2 A 2 3.400000
3 B 1 3.266667

清晰度

为了演示我们添加的字段,添加 row_num2 后的数据如下所示:

   Name     X row_num_mod row_num2
<chr> <dbl> <dbl> <int>
1 A 3.1 1 1
2 A 2.5 2 1
3 A 3.6 0 1
4 A 3.4 1 2
5 B 4.6 1 1
6 B 1.8 2 1
7 B 3.4 0 1

数据

dat <- read.table(text = " Name     X  
A 3.1
A 2.5
A 3.6
A 3.4
B 4.6
B 1.8
B 3.4 ", header = TRUE, stringsAsFactors = FALSE)

关于r - 通过对 r 中的另一列进行分组来求 n 行的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910245/

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