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

У меня есть данные о налогоплательщиках, у которых есть несколько филиалов, которые создают несколько строк, которые почти дублируют друг друга, за исключением одного соответствующего столбца (деятельность предприятия). Я хочу изменить это так, чтобы у каждого налогоплательщика была только одна строка, которая включает создание столбцов «enterprise_activity_1», «enterprise_activity_2» и так далее.

Я понимаю, что это похоже на изменение формы, но я не могу придумать, как использовать tidyr::spread для достижения этой цели.

Для простоты предположим, что у нас есть фрейм данных, например:

df <- tibble::tibble(
  TAXPAYER_ID = c(100, 151, 250, 250, 267, 296, 296, 304),
  ENTERPRISE_ACTIVITY = rep(c("AGRICULTURE", "MANUFACTURING"), 4)
)

Чего я хотел бы добиться, так это:

TAXPAYER_ID ENTERPRISE_ACTIVITY_1   ENTERPRISE_ACTIVITY_2
100         AGRICULTURE             NA
151         MANUFACTURING           NA
250         AGRICULTURE             MANUFACTURING
267         AGRICULTURE             NA
296         MANUFACTURING           AGRICULTURE
304         MANUFACTURING           NA

Мои фактические данные имеют различное количество отделений на одного налогоплательщика, поэтому количество столбцов должно быть максимальным количеством отделений, которое имеет один налогоплательщик.

Спасибо, что указали на этот вопрос, но это не совсем то же самое, поскольку в моих данных нет столбца, который содержит индекс для каждого филиала в рамках налогоплательщика. Но если бы я мог создать этот индекс, я мог бы использовать tidyr::spread прямо, как в этом вопросе.

Jonathan Aron 29.05.2019 14:10
Стоит ли изучать 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
1
14
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В основном вам нужно сгруппировать по идентификатору налогоплательщика, создать столбец для обработки повторяющихся идентификаторов и разброса, т.е.

library(tidyverse)

df %>% 
  group_by(TAXPAYER_ID) %>% 
  mutate(ENTERPRISE_ACT = row_number()) %>% 
  spread(key = ENTERPRISE_ACT, ENTERPRISE_ACTIVITY, sep = '_')

# A tibble: 6 x 3
# Groups:   TAXPAYER_ID [6]
#  TAXPAYER_ID ENTERPRISE_ACT_1 ENTERPRISE_ACT_2
#        <dbl> <chr>            <chr>           
#1         100 AGRICULTURE      <NA>            
#2         151 MANUFACTURING    <NA>            
#3         250 AGRICULTURE      MANUFACTURING   
#4         267 AGRICULTURE      <NA>            
#5         296 MANUFACTURING    AGRICULTURE     
#6         304 MANUFACTURING    <NA>      

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