如何在 R 的列表中按组获取平均值

Posted

技术标签:

【中文标题】如何在 R 的列表中按组获取平均值【英文标题】:How can I get the mean by groups in a list in R 【发布时间】:2021-04-20 18:03:50 【问题描述】:

我有一个这样的列表:

Years sallary
1 121
12 4343
25 1341
23 12
15 325
2 574
4 5473
8 347
30 352
29 237
3 734
10 2469
11 1239
5 2456
20 231
6 9381
28 1284
13 1295
9 129
7 931
19 1293
27 1239
14 124
24 512
18 912
26 8321
17 12383
22 419
16 129
more than 30 years 12394
21 1239

抱歉,列表很大,但我的列表更大,我必须确保没有人给我硬编码的列表。 我想要的是一个具有分组年份平均值的列表。


group1 <- c("less than 1 year", "1", "2", "3", "4", "5")
group2 <- c("6", "7", "8", "9", "10")
...

| Years | sallary | 
|:---- |:------:| 
| group1  | e.g. 1295    | 
| group2  | e.g. 12012   | 
| group3  | e.g. 8521    | 
| group4  | e.g. 2491    | 
| group5  | e.g. 12349   | 
| group6  | e.g. 1299    | 

I amm sorry for this list but otherwise it gives me an error if I do not put the table inside the code block... But that is the list I want.

其他答案无济于事,因为它们通过相同的行计算平均值。但我有一个字符串。

感谢您的任何指点。

【问题讨论】:

【参考方案1】:

我们根据组向量替换“年”。使用mget 将所有“组”向量放入list,将list 转换为两列data.framestack),然后与原始数据进行连接,替换“年”列使用“值”,将其用作分组列,summarise 用作“工资”列

library(dplyr)
df2 <- stack(mget(ls(pattern = '^group\\d+$')))[2:1]
names(df2)[2] <- 'Years'
df1 %>% 
     left_join(df2, by = 'Years') %>%
     group_by(Years = ind) %>%
     summarise(sallary = mean(sallary, na.rm = TRUE))       
 

【讨论】:

以上是关于如何在 R 的列表中按组获取平均值的主要内容,如果未能解决你的问题,请参考以下文章

R中按组月的平均温度

如何从 sql 中的 2 个表中按组聚合和计算平均值?

如何在ggplot的箱线图中按组绘制平均值

在 Pandas 中按组均值创建大均值中心变量

在SQL中按组计算移动平均数

在 R 中按组创建组合