Выбор уникальных строк в 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