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

R中重复行之间的平均值

高博涉
2023-03-14

我有一个数据帧df,其中的行与name列重复,但与value列不重复:

name    value   etc1    etc2
A       9       1       X
A       10      1       X
A       11      1       X
B       2       1       Y
C       40      1       Y
C       50      1       Y

我需要将重复的名称聚合到一行中,同时计算值列的平均值。预期产出如下:

name    value   etc1    etc2
A       10      1       X
B       2       1       Y
C       45      1       Y

我已经尝试使用< code>df[duplicated(df$name),],但是这当然不能说明重复的含义。我想使用< code>aggregate(),但问题是这个函数有趣的部分也适用于所有其他列,而且在其他问题中,它不能计算char内容。由于所有其他列在“副本”上具有相同的内容,我需要将它们聚合起来,就像name列一样。有什么提示吗...?

共有3个答案

井唯
2023-03-14

代码(由Metrics编写)几乎正常工作,除了一个地方(.name)。我稍微修改了一下:

sample<- structure(list(name = structure(c(1L, 1L, 1L, 2L, 3L, 3L), .Label = c("A", 
    "B", "C"), class = "factor"), value = c(9L, 10L, 11L, 2L, 40L, 
    50L), etc1 = c(1L, 1L, 1L, 1L, 1L, 1L), etc2 = structure(c(1L, 
    1L, 1L, 2L, 2L, 2L), .Label = c("X", "Y"), class = "factor")), .Names = c("name", 
    "value", "etc1", "etc2"), class = "data.frame", row.names = c(NA, 
    -6L))

sample.m <- ddply(sample, 'name', summarize, value =mean(value), etc1=head(etc1,1), etc2=head(etc2,1))

sample.m
      name value etc1 etc2
    1    A    10    1    X
    2    B     2    1    Y
    3    C    45    1    Y
吉嘉珍
2023-03-14

您可以使用聚合()函数,如下所示:

aggregate(df$value,by=list(name=df$name,etc1=df$etc1,etc2=df$etc2),data=df,FUN=mean)
全心思
2023-03-14

这是一个数据表解决方案。该解决方案是通用的,因为它甚至可以用于具有60列的data.frame。由于我按所有值不同的变量对数据进行分组(请参阅下面的我如何创建键)

library(data.table)
dat <- read.table(text='name    value   etc1    etc2
A       9       1       X
A       10      1       X
A       11      1       X
B       2       1       Y
C       40      1       Y
C       50      1       Y',header=TRUE)
keys <- colnames(dat)[!grepl('value',colnames(dat))]
X <- as.data.table(dat)
X[,list(mm= mean(value)),keys]
  name etc1 etc2 mm
1:    A    1    X 10
2:    B    1    Y  2
3:    C    1    Y 45

编辑扩展到多个值变量

如果您有多个数值变量需要计算平均值,例如,如果您的数据如下所示

  name value etc1 etc2     value1
1    A     9    1    X  2.1763485
2    A    10    1    X -0.7954326
3    A    11    1    X -0.5839844
4    B     2    1    Y -0.5188709
5    C    40    1    Y -0.8300233
6    C    50    1    Y -0.7787496

上述解决方案可以这样扩展:

X[,lapply(.SD,mean),keys]
   name etc1 etc2 value     value1
1:    A    1    X    10  0.2656438
2:    B    1    Y     2 -0.5188709
3:    C    1    Y    45 -0.8043865

这将计算键列表中不存在的所有变量的平均值。

 类似资料:
  • 问题内容: 我有一个存储一些时间戳的mysql数据库。假设表中所有的都是ID和时间戳。时间戳可能重复。 我想查找不重复的连续行之间的平均时间差(按时间)。有没有办法在SQL中做到这一点? 问题答案: 如果您的表是t,而您的时间戳列是ts,并且您想在几秒钟内得到答案: 对于大型桌子,这将是更快的里程,因为它没有n平方的JOIN 这使用了一个可爱的数学技巧,可以解决该问题。暂时忽略重复的问题。连续行之

  • 我有一个netCDF文件(. nc),其中包含16年(1998-2014年)的日降水量(5844层)。3个维度是时间(大小5844)、纬度(大小19)和经度(大小20)R中是否有一种简单的方法来计算每个rastercell: < li >每月 到目前为止,我已经: 我的第一个挑战是计算每个光栅单元的月平均值。我不确定在牢记最终目标(累积比较)的同时,如何最好地进行。我怎样才能轻松地访问某个月的几天

  • 问题内容: 我正在尝试学习SQL,所以请耐心等待。我正在使用PostgreSQL 9.3 我想根据日期窗口对一列进行平均。我能够编写窗口函数来完成一个集合,但是我希望能够随着不断增长做到这一点。我的意思是: 我假设有一个比对我要平均的每个范围运行查询更好的方法。任何建议表示赞赏。谢谢你。 编辑 我正在尝试创建均匀分布的垃圾箱,以用于汇总表的值。 我的间隔是: 这里是一个表的列 并且 是并列我想表分

  • 所以我在上面创建了这个表格,现在我试图用它来绘制 但是现在我想弄清楚如何画一条均值线,例如,我在图像的右边画了爱尔兰的均值,我不知道如何在这个均值的图表上画一条线。真的,任何帮助感谢。干杯,伙计们。

  • 我在ggplot2包中有一个时间序列的图,我已经执行了移动平均,我想把移动平均的结果添加到时间序列的图中。 数据集样本(p31): ambtemp DT -1.14 2007-09-29 00:01:57 -1.12 2007-09-29 00:03:57 -1.33 2007-09-29 00:05:57 -1.44 2007-09-29 00:07:57 -1.54 2007-09-29 00

  • 主要内容:1.平均值,2.中位数,3.众数R中的统计分析通过使用许多内置函数来执行的。这些函数大部分是R基础包的一部分。这些函数将R向量与参数一起作为输入,并在执行计算后给出结果。 我们在本章中讨论的是如何求平均值,中位数和众数。下面将分别一个个演示和讲解 - 1.平均值 平均值是通过取数值的总和并除以数据序列中的值的数量来计算。函数用于在R中计算平均值。 语法 R中计算平均值的基本语法是 - 以下是使用的参数的描述 - x - 是输入向