合并列,同时在R中同时求和值

时间:2019-03-20 12:57:48

标签: r merge sum

我的问题很简单。我是R的新手,我有一些数据框看起来像这样:

> print(averagetable)
   Group.1 Vigilance   Head-up   Grazing    Browsing     Moving   Grooming Resting      Fleeing
1 cluster1 0.2275285 0.5353896 0.1411797 0.005844156 0.04832251 0.01666667       0 0.0014610390
2 cluster2 0.2718750 0.2506696 0.3174107 0.004241071 0.08125000 0.04174107       0 0.0008928571
3 cluster3 0.3486111 0.4276515 0.1337121 0.012500000 0.03472222 0.01603535       0 0.0027777778

我只想执行以下操作:

1)将列Browsing合并到Grazing中,并对每一行的值求和。新列将命名为Feeding

2)将列Fleeing合并到Moving中,并对每一行的值求和。

3)将列VigilanceGroomingResting合并到Head-up中,并对每一行的值求和。新列将命名为Standing still

预期的输出示例(使用值而不是公式):

> print(averagetable)
   Group.1             Standing still                    Moving           Feeding     
1 cluster1  sum(Head-up+Vigilance+Resting+Grooming  sum(Fleeing+Moving) sum(Grazing+Browsing)
2 cluster2            "                                    "                    "                    
3 cluster3            "                                     "                   "

有人可以让我知道一种转换数据的紧凑方法吗?有合并和汇总列值的特殊功能吗?

感谢任何输入!

2 个答案:

答案 0 :(得分:2)

averagetable <- data.frame(averagetable$Head-up + averagetable$Vigilance + averagetable$Resting + averagetable$Grooming,
                           averagetable$Fleeing + averagetable$Moving,
                           averagetable$Grazing + averagetable$Browsing)
colnames(averagetable) <- c('Standing still','Moving','Feeding')

首先使用所需的列创建一个数据框,然后为其命名。

答案 1 :(得分:2)

如评论中所述,这只是简单的求和:

library(dplyr)
library(data.table)
#dplyr option
averageTable %>% mutate(`Standing Still` = sum(Head.up, Vigilance, Resting, Grooming),
                        Moving = sum(Fleeing, Moving),
                        Feeding = sum(Grazing, Browsing)) %>% select(Group.1, `Standing Still`, Moving, Grazing)

#Even better dplyr option thank @moody_mudskipper(I'm not a tidyverse aficionado) 
averageTable %>% transmute(Group.1, `Standing Still` = sum(Head.up, Vigilance, Resting, Grooming),
                        Moving = sum(Fleeing, Moving),
                        Feeding = sum(Grazing, Browsing))

#data.table option
setDT(averageTable)
averageTable[, .(`Standing Still` = sum(Head.up, Vigilance, Resting, Grooming),
             Moving = sum(Fleeing, Moving),
             Feeding = sum(Grazing, Browsing)), by = "Group.1"]