Выбор уникальных строк в R

Существует data.frame с повторяющимися значениями для переменной "Время"

> data.old
             Time  Count  Direction
1    100000630955     95          1
2    100000637570      5          0
3    100001330144      7          1
4    100001330144     33          1
5    100001331413     39          0
6    100001331413     43          0
7    100001334038      1          1
8    100001357594     50          0

Вы должны оставить все значения без дубликатов. И суммируйте значения переменной "Count" с повторяющимися значениями, то есть

> data.new
             Time  Count  Direction
1    100000630955     95          1
2    100000637570      5          0
3    100001330144     40          1
4    100001331413     82          0
5    100001334038      1          1
6    100001357594     50          1

Все эти уникальные значения можно найти с помощью команды

> data.old$Time[!duplicated(data.old$Time)]
   [1] 100000630955 100000637570 100001330144 100001331413 100001334038 100001357594  

Я могу сделать это в цикле, но, возможно, есть более элегантное решение

Ответ 1

Здесь один подход с использованием dplyr. Это то, что вы хотите сделать?

library(tidyverse)
data.old %>%
group_by(Time) %>%
   summarise(Count = sum(Count))

Изменить: сохранение других переменных

OP указала на желание сохранить значения других переменных в фрейме данных, который summarise удаляет. Предполагая, что все значения этих других переменных одинаковы для всех суммируемых строк, вы можете использовать функцию Mode из этого вопроса SO.

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

Затем измените мой ответ на следующий, с одним вызовом режима для каждой переменной, которую вы хотите сохранить. Это работает как с числовыми, так и с символьными данными.

library(tidyverse)
data.old %>%
group_by(Time) %>%
   summarise(Count = sum(Count), Direction = Mode(Direction))

Ответ 2

здесь используется функция агрегации

data.new<-aggregate( Count~Time , data=data.old, sum, na.rm=TRUE)

Ответ 3

 library(dplyr)  
  data.old %>% group_by(Time) %>% summarise(Count = sum(Count), 
                                       Direction =  unique(Direction))

Конечно, если вы хотите сохранить уникальные значения столбца Direction