我有一个数据帧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列一样。有什么提示吗...?
代码(由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
您可以使用聚合()
函数,如下所示:
aggregate(df$value,by=list(name=df$name,etc1=df$etc1,etc2=df$etc2),data=df,FUN=mean)
这是一个数据表
解决方案。该解决方案是通用的,因为它甚至可以用于具有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 - 是输入向