R - объединить строки на основе условий?

Я создал таблицу сопоставления в R и привел пример того, как она выглядит:

ex <- data.frame("id" = c(rep(1234,7)), "claim" = c(1234, 1367, 1234, 1869, 1234, 1367,1234),
             "code1" = c(24, 61, 28, 21, 20, 29,80), date = c('2019-03-18', '2019-04-12',
                                                           '2019-03-18', '2019-03-18',
                                                           '2019-03-18', '2019-04-12', '2019-03-18'),
             'code2' = c(24,29,24,24,24, 29,24), dx1=c("M234","M123",NA,"M434",NA,NA, NA),
             dx2=c(NA,NA,NA,NA,"M789","Z123", "M999"),
             dx3 = c(NA,NA,"M689",NA,NA,NA, NA),
             pay = c(1000, 520, 1000, 780, 1000,520,1000))

Есть ли способ, которым я мог бы найти способ получить это как мой окончательный результат:

ex2 <- data.frame("id" = c(rep(1234,3)), date = c('2019-03-18', '2019-03-18','2019-04-12'),
              'code2' = c(24,24,29),
              dx1=c("M234","M434","M123"),
              dx2=c("M789",NA,"Z123"),
              dx3 = c("M689",NA,NA),
              dx4 = c("M999", NA, NA),
              pay = c(1000,780,520))

В основном я хотел бы, чтобы любые значения в dx2 или dx3 в примере 1 просто добавлялись в ту же строку, соответствующую этому значению code2. Однако, если в dx1 есть несколько значений для code2, я хотел бы сохранить их в виде отдельной строки.

Есть ли способ сделать что-то подобное в R? Заранее спасибо!

edit: в моей таблице сопоставления (ex) есть только столбцы dx1, dx2, dx3. Я хотел бы, чтобы любое кратное значение в dx2 или dx3 добавлялось в качестве новых столбцов (именно поэтому в ex2 теперь есть столбец dx4). Эти изменения сгруппированы по code2. Таким образом, если в dx2 или dx3 есть несколько значений для кода 24, это будет определять, сколько новых столбцов dx2 будет создано. Затем порядок можно определить по столбцу max(pay).

в dx4 нет ex, а в ex2 есть. похоже, что значение dx4 является кратным значением для dx2. можете ли вы подробнее описать, как обрабатывать несколько значений для каждого типа dx?

andrew_reece 23.12.2020 01:59

Я включил объяснение в свой вопрос. Дайте мне знать, если это поможет!

vdu12345 23.12.2020 02:07

спасибо, это полезная информация. это необычная схема манипуляции. например, если для каждого уровня в code2 есть 2 значения для dx1, dx2 и dx3, вы говорите, что вам нужны две строки (по одной для каждого dx1), но затем четыре столбца в дополнение к dx1, теперь dx2-5? как вы решаете, какие из значений dx2 и dx3 помещаются в новые столбцы? возможно, если бы вы могли объяснить свой вариант использования немного больше, было бы легче помочь вам найти более простое решение.

andrew_reece 23.12.2020 02:10

также должны ли значения dx2 и dx3 появляться только в первой строке сгруппированного code2? или они повторяются для всех строк, представляющих уникальный dx1?

andrew_reece 23.12.2020 02:13

как следует относиться к строке 6 из ex, где нет значения dx1, но есть значение dx2? в ex2 вы помещаете это значение dx2 в ту же строку, что и dx1. но подумайте, есть ли два значения dx1 внутри code2 == 29. как бы вы назначили dx2 в строке без dx1?

andrew_reece 23.12.2020 02:18

Раньше я исключал столбец оплаты, но теперь включил его. Если я включу столбец оплаты, то я бы хотел назначить любой dx1, dx2 или dx3 на одну строку, если они имеют максимальное значение оплаты. Тогда второй dx1 будет во второй строке, так как это не максимальная оплата.

vdu12345 23.12.2020 02:35
Стоит ли изучать 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
6
164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы требуете этого?

library(tidyverse)

ex %>% pivot_longer(cols = c("dx1", "dx2", "dx3"), names_to = "code3", values_to = "val", values_drop_na = T) %>%
  arrange(claim, code2, code3) %>% group_by(id, claim, date, code2, code3) %>%
  mutate(dummy = n(),
         dummy2 = row_number(),
         code3 = ifelse(dummy >1 & dummy2 >1, "dx4", code3)) %>% arrange(code3) %>%
  pivot_wider(id_cols = c('id', 'claim', 'date', 'code2', 'pay'), names_from = 'code3', values_from = 'val', values_fn = min) %>%
  ungroup() %>% select(-claim)

# A tibble: 3 x 8
     id date       code2   pay dx1   dx2   dx3   dx4  
  <dbl> <chr>      <dbl> <dbl> <chr> <chr> <chr> <chr>
1  1234 2019-03-18    24  1000 M234  M789  M689  M999 
2  1234 2019-04-12    29   520 M123  Z123  NA    NA   
3  1234 2019-03-18    24   780 M434  NA    NA    NA   

Пожалуйста, уточните, может ли быть более двух значений в любом из dx1-dx3?

AnilGoyal 23.12.2020 06:52

Соответствовало ли это требованию?

AnilGoyal 26.12.2020 17:14

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