我有一个数据框df
,其中的行与名称列重复,但与值列不重复:
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
我需要将重复的名称聚合到一行中,同时计算values列的平均值。预期输出如下:
name value etc1 etc2
A 10 1 X
B 2 1 Y
C 45 1 Y
我试过使用df[duplicated(df$name),]
,但当然这不能给予我重复项的平均值。我想使用aggregate()
,但问题是这个函数的FUN部分也将应用于所有其他列,并且除了其他问题外,它将无法计算char内容。由于所有其他列在“重复项”上都具有相同的内容,我需要他们被聚合,就像名称列。任何提示...?
5条答案
按热度按时间inkz8wg91#
这里是一个
data.table
的解决方案。这个解决方案是通用的,即使是一个有60列的数据框架也能工作。因为我把数据按所有变量的不同值进行了分组(见下面我是如何创建键的)EDIT扩展到多个 value 变量
如果您有多个数值变量要计算平均值,例如,如果您的数据如下所示
上述解决方案可以扩展为:
这将计算键列表中不存在的所有变量的平均值。
qpgpyjmq2#
您可以使用
aggregate()
函数,如下所示:8dtrkrch3#
代码(由Metrics编写)几乎可以正常工作,除了一个地方(.name)。
tp5buhyn4#
假设你的 Dataframe 是df。
jk9hmnmh5#
这个简单的方法对我很有效:
平均值_数据〈-聚合(. ~名称,df,平均值)
使用“聚合”函数:根据命名变量(“name”),在数据.frame“df”中对所有变量(.)应用公式方法(x ~ y),以执行“mean”功能。