首页 > 解决方案 > 通过对分组变量的某些列求和来合并特定行

问题描述

以下数据框是更大 df 的子集,其中包含重复信息

df<-data.frame(Caught=c(92,134,92,134),
               Discarded=c(49,47,49,47),
               Units=c(170,170,220,220),
               Hours=c(72,72,72,72),
               Colour=c("red","red","red","red"))

Base R中,我想得到以下内容:

df_result<-data.frame(Caught=226,
                      Retained=96,
                      Units=390,
                      Hours=72,
                      colour="red")

所以基本上结果是 Caught、Retained、Units 列的唯一值的总和,并为 Hours 和 color 保留相同的值(Caught=92+134,Retained=49+47,Units=170+220,Hours=72,color ="红色)

但是,我打算在包含几列的更大的 data.frame 中执行此操作。我的想法是应用一个基于列名的函数:

l <- lapply(df, function(x) {
  if(names(x) %in% c("Caught","Discarded","Units"))
    sum(unique(x))
  else
    unique(x)
})
as.data.frame(l)

但是,这不起作用,因为我不完全确定在使用时如何提取向量名称lapply()以及诸如此类的其他功能。

我试过没有成功实现by()apply()功能。

谢谢

标签: rdatabaseaggregatedatabase-management

解决方案


要求基础 R:

    l <- lapply( df, function(n) {
        if( is.numeric(n) )
            sum( unique(n) )
        else
            unique( n )
    })
    as.data.frame(l)

该解决方案利用了 data.frames 实际上只是向量列表的事实。

它产生这个:

    #  Caught Discarded Units Hours Colour
    #    226        96   390    72    red

推荐阅读