Объединение столбцов при одновременном суммировании значений в R - PullRequest
0 голосов
/ 20 марта 2019

Мой вопрос прост.Я довольно новичок в 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            "                                     "                   "

Может кто-нибудь сообщить мне компактный способ преобразования данных?Есть ли специальная функция для слияния и суммирования значений столбцов?

Любой ввод приветствуется!

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Как указано в комментариях, это просто простое суммирование:

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"]
2 голосов
/ 20 марта 2019
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')

Сначала создайте фрейм данных с нужными вам столбцами, а затем назовите их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...