我的问题很简单。我是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)将列Vigilance
,Grooming
和Resting
合并到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 " " "
有人可以让我知道一种转换数据的紧凑方法吗?有合并和汇总列值的特殊功能吗?
感谢任何输入!
答案 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"]