当前位置: 首页 > 知识库问答 >
问题:

聚合多个重复项并计算其平均值

宗增
2023-03-14

假设我们有一个DF,其受尊重的用户ID中有重复项,但名称不同,当然也可以是重复项。

DF <- data.frame(ID=c(101,101,101,101,101,102,102,102,102),
Name=c("Ed","Ed","Hank","Hank","Hank","Sandy","Sandy","Jessica","Jessica"),
Class=c("Junior","Junior","Junior","Junior", "Junior","High","High","Mid","Mid"),
Scoring=c(11,15,18,18,12,20,22,25,26), Other_Scores=c(15,9,34,23,43,23,34,23,23))

目的是分别聚合和计算用户ID及其名称的均值和均方差。一个所需的输出示例:

UserID  Name     Class    Scoring_mean  Scoring_std
101     Ed       Junior   12.5          3
101     Hank     Junior   24.67         11.62
102     Sandy    High     24.75         6.29
102     Jessica  High     24.25         1.5

因此我的问题是:

  • 有哪些选项可以根据UserID聚合Names,而不会丢失信息(Hank被强制插入Ed等,就像sumise()或mutate()一样)

按照我的想法,R必须检查哪个名称对应于用户ID,以及是否匹配;汇总并计算平均值

与此同时,我找不到任何其他与这个问题相关的帖子,比如:

  1. 如何计算R中特定行的平均值
  2. 根据匹配列减去列对。
  3. 计算R中需要满足2个条件时的平均值
  4. R中重复行之间的平均值

共有2个答案

金昌胤
2023-03-14

这里有一个<code>tidyverse</code>选项,它使用一些整形来创建一列分数,然后进行一些分组以获得汇总统计数据:

DF <- data.frame(
ID=c(101,101,101,101,101,102,102,102,102),
Name=c("Ed","Ed","Hank","Hank","Hank","Sandy","Sandy","Jessica","Jessica"),
Class=c("Junior","Junior","Junior","Junior", "Junior","High","High","Mid","Mid"),
Scoring=c(11,15,18,18,12,20,22,25,26), 
Other_Scores=c(15,9,34,23,43,23,34,23,23)
)

library(tidyverse)

DF %>%
  gather(score_type, score, Scoring, Other_Scores) %>%  # reshape score columns
  group_by(ID, Name, Class) %>%                         # group by combinations
  summarise(scoring_mean = mean(score),                 # get summary stats
            scoring_sd = sd(score)) %>%
  ungroup()                                             # forget the grouping

# # A tibble: 4 x 5
#       ID Name    Class  scoring_mean scoring_sd
#    <dbl> <fct>   <fct>         <dbl>      <dbl>
# 1  101. Ed      Junior         12.5       3.00
# 2  101. Hank    Junior         24.7      11.6 
# 3  102. Jessica Mid            24.2       1.50
# 4  102. Sandy   High           24.8       6.29
淳于哲
2023-03-14

如何计算你的汇总统计数据,然后将结果加入到你的初始数据框架中。像这样:

DF <- data.frame(ID=c(101,101,101,101,101,102,102,102,102),
                 Name=c("Ed","Ed","Hank","Hank","Hank","Sandy","Sandy","Jessica","Jessica"),
                 Class=c("Junior","Junior","Junior","Junior", "Junior","High","High","Mid","Mid"),
                 Scoring=c(11,15,18,18,12,20,22,25,26), Other_Scores=c(15,9,34,23,43,23,34,23,23))


DF2 <- DF %>% group_by(Name) %>%
  summarise(scoring_mean=mean(Scoring), scoring_sd = sd(Scoring)) %>%
  left_join(DF[,c(1,2,3)], by="Name")

给:

# A tibble: 9 x 5
  Name    scoring_mean scoring_sd    ID Class 
  <fct>          <dbl>      <dbl> <dbl> <fct> 
1 Ed              13.0      2.83   101. Junior
2 Ed              13.0      2.83   101. Junior
3 Hank            16.0      3.46   101. Junior
4 Hank            16.0      3.46   101. Junior
5 Hank            16.0      3.46   101. Junior
6 Jessica         25.5      0.707  102. Mid   
7 Jessica         25.5      0.707  102. Mid   
8 Sandy           21.0      1.41   102. High  
9 Sandy           21.0      1.41   102. High 
 类似资料:
  • 在JavaScript中,我生成了一个x个数组,所有数组由57个数字组成。我想计算数组中每个数字的平均值,作为一个数组的平均值,即: array1[0]array2[0]array3[0]…./阵列数=[0]的平均值 array1[1]阵列2[1]阵列3[1]…./阵列数=[1]的平均值 数组一数组二数组三数组二..../数组数量=平均值[2] 这是生成的数组数组的示例: 谁能给我一个例子,让我可

  • 假设我有一个类的,每个类都有一个。 中的键是时间戳,值是分数。 我试图创建一个,它可以组合所有对象的地图,并输出带有唯一时间戳(Thes)和平均分数的。 我有这个代码,但它给我所有分数的总和,而不是平均值(类没有平均值方法)。 我想这可能不是一个简单的问题,所以在一个单一的中解决,所以一个带有唯一时间戳的和所有分数的的输出也可以。然后我可以自己计算平均值。 它它可能吗?

  • 我试图做以下java分配和每件事似乎工作正常,除了当我把一个数字 谢谢 赋值:创建一个询问考试结果并计算成绩平均值的程序。成绩是4到10之间的浮点数。程序要求成绩,直到键入负数。如果用户给出的分数不是4到10之间的数字,则文本“无效成绩!”将在屏幕上打印,程序要求另一个分数。最后,程序在屏幕上打印输入的成绩数及其平均值,如示例打印所示。如果没有输入成绩,通知“您没有输入任何成绩。”是屏幕上唯一打印

  • 问题内容: 通常,您需要显示数据库项目的列表以及有关每个项目的特定汇总号。例如,当您在“堆栈溢出”中键入标题文本时,将出现“相关问题”列表。该列表显示了相关条目的标题以及每个标题的响应数量的单个汇总数量。 我有一个类似的问题,但需要多个聚合。我想根据用户选项以3种格式中的任何一种显示项目列表: 我的商品的名称(共15个,我拥有的13个) 我的商品的名称(共15个) 我的商品的名称(我拥有13个)

  • 问题内容: 编辑:我已经写了平均的代码,但我不知道如何使它也使用从我的args.length而不是数组的整数 我需要编写一个Java程序,该程序可以计算:1.读入的整数数2.平均值-不必是整数! 注意!我不想从数组中计算平均值,但是要在args中计算整数。 目前我已经写了这个: 谁能指导我正确的方向?还是举个例子,以书面形式指导我塑造这段代码? 提前致谢 问题答案: 只需对您的代码进行一些小的修改

  • 我有一个来自ERA5的2m温度netcdf文件,从2000年到2019年,从04月到10月,总共有13680个时间步长和61x161个纬度。我想分别计算每年所有每日时间步长的月平均值。例如,我们将获得2000年4月、2000年5月等数据的月平均值。我用xarray resample尝试了下面的代码,但是出现了两个问题。 出于某种原因,多年来,中庸之道似乎都是如此 重采样函数创建01、02、03、1