Объединить строки с одинаковым идентификатором, но с перекрывающимися переменными - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть данные в r, которые содержат более 6000 наблюдений и 96 переменных.

Данные относятся к группам людей и их деятельности и т. Д. c. Если группа вернула идентификационный номер группы, она была записана снова, и было сделано новое наблюдение. Мне нужно объединить строки по идентификатору, чтобы число лиц заняло наибольшее число записанных, но действия и c представляют собой комбинацию обоих наблюдений.

Данные содержат # лиц, действий, удары, время прибытия и др. c. Проблема в том, что некоторые наблюдения были разбиты на две строки, поэтому могут быть действия, которые были записаны для той же группы в другой строке. Идентификатор группы для обоих наблюдений один и тот же, но у одного может быть записано количество отдельных лиц и некоторые записи или воздействия, но второе может быть неполным и иметь только идентификатор группы и последующие воздействия (которые являются дополнительными к тем, которые указаны в первой записи). ). Число лиц в группе никогда не меняется, поэтому мне нужен какой-то способ их объединения, чтобы действия были аддитивными, но #visitors принимает самое высокое значение, время прибытия должно быть записано как можно раньше, а время отправления должно быть позднее из двух наблюдений.

Кто-нибудь знает, как объединить наблюдения на основе идентификатора группы, но изменить протокол объединения на основе переменной.

введите описание изображения здесь

1 Ответ

0 голосов
/ 04 февраля 2020

Я не уверен, действительно ли это то, что вам нужно, но для объединения строк фрейма данных на основе нескольких условий вы можете использовать пакет dplyr и его функцию summarise(). Я сгенерировал некоторые данные для непосредственного использования в R, вам придется изменить код в соответствии с вашими потребностями.

# generate data
ID<-rep(1:20,2)
visitors<-sample(1:50, 40, replace=TRUE)
impact<-sample(rep(c("a", "b", "c", "d", "e"), 8))
arrival<-sample(rep(8:15, 5))
departure <- sample(rep(16:23, 5))

df<-data.frame(ID, visitors, impact, arrival, departure)
df$impact<-as.character(df$impact)

# summarise rows with identical ID
df_summary <- df %>%
  group_by(ID) %>%
  summarise(visitors = max(visitors), arrival = min(arrival), 
            departure = max(departure), impact = paste0(impact, collapse =", "))

Надеюсь, это поможет!

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