Как извлечь повторяющиеся строки и объединить их по определенной переменной

название немного сбивает с толку, но у меня есть набор данных, который выглядит так: head(df)

ID  Race                               Disease
1 8818894 White                 Hepatitis C - chronic
2 8818894 White                 Hepatitis C - chronic
3 8421024 White                    Campylobacteriosis
4 8420854 White                          Tuberculosis
5 8266841 White                     Cryptosporidiosis
6 8241742 White Hepatitis B (including delta) - acute

Некоторые идентификаторы дублируются, потому что они оба белые и латиноамериканцы, поэтому это создало наблюдение для обеих их «рас».

Я хотел бы объединить эти идентификаторы и сделать так, чтобы их раса читалась как «белый, латиноамериканец». Есть простой способ сделать это? Я предполагаю, что это будет немного сложно.

Спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

довольно просто: сгруппировать по идентификатору, вставить и свернуть уникальные значения из других столбцов.

пользовательские образцы данных с дубликатом идентификаторов Белые/испаноязычные

library(data.table)
DT <- fread('ID  Race                               Disease
 8818894 White                 "Hepatitis C - chronic"
 8818894 Hispanic                 "Hepatitis C - chronic"
 8421024 White                   "Campylobacteriosis"
 8420854 White                          "Tuberculosis"
 8266841 White                     "Cryptosporidiosis"
 8241742 White "Hepatitis B (including delta) - acute"')

# data.table::fread() reads the text directly to a data.tale format. If you 
# already have your data in a data.frame, you can convert it using 
# data.table::setDT(mydata)

код

DT[, lapply(.SD, function(x) paste0(unique(x), collapse = " & ")), by = .(ID)]

#         ID             Race                               Disease
# 1: 8818894 White & Hispanic                 Hepatitis C - chronic
# 2: 8421024            White                    Campylobacteriosis
# 3: 8420854            White                          Tuberculosis
# 4: 8266841            White                     Cryptosporidiosis
# 5: 8241742            White Hepatitis B (including delta) - acute

объяснение кода

DT: ваши данные в формате data.table (см. пример кода выше)
lapply(...): зацикливается на первом элементе, то есть
.SD: все столбцы в ваших данных (которые не включены в
группировка by-аргумент в конце.
Если вы хотите выбрать только пару столбцов для цикла, вы можете использовать селектор .SDcols. Подробнее об этом в файле справки от data.table.

Итак, группируем ДТ by ID. Мы выполняем цикл (lapply) по каждому столбцу (.SD), вызываем эту переменную столбца x (function(x)) и выполняем следующую функцию: paste0(unique(x), collapse = " & ")); это получает все уникальные (unique) элементы из текущего столбца и вставляет (paste0) их вместе (collapse), используя заданный разделитель (" & ").

Привет спасибо за это! Я пытаюсь понять синтаксис здесь, но немного запутался: у меня есть mydataframe[, lapply(.SD, function(Race) paste0(unique(Race), collapse = " & ")), by = .(ID)] Извинения за беспокойство!

John Tayson 21.03.2022 21:06

Я добавил некоторое объяснение в свой ответ выше.

Wimpel 22.03.2022 08:43

Другие вопросы по теме