Несколько строк в несколько столбцов Dataframe в R

Я относительно новичок в R и пытаюсь определенным образом перенести рамку даты из повторяющихся строк в столбцы. Я хочу, чтобы в tidyr использовались строки spread (), но я считаю, что это немного отличается, потому что я не могу понять это правильно. Каждая запись будет уникальной в зависимости от компании, местоположения и типа, при этом несколько строк спецификации будут распределены в виде столбцов. Существует различное количество спецификаций, каждая уникальная запись может достигать 20 спецификаций.

Что у меня есть

Company    Loc         Type     Spec
100000012   104         51      363
100000012   104         51      431
100000012   104         51      508
100000012   104         51      512
100000012   104         51      513
100000012   126         51      513
100000012   166         53      530
100000012   42          51      516
100000012   43          53      530
100123545   50          52      513
100123545   50          52      363

Что я хочу

Company    Loc         Type     Spec1  Spec2  Spec3  Spec4  Spec5
100000012   104         51      363     431    508    512    513
100000012   126         51      513
100000012   166         53      530
100000012   42          51      516
100000012   43          53      530
100123545   50          52      513     363
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
883
2

Ответы 2

Мы можем использовать dcast

library(data.table)
dcast(setDT(df1), Company + Loc + Type ~
         paste0("Spec", rowid(Company, Loc, Type)), value.var = "Spec")

Мы также можем использовать и .

library(dplyr)
library(tidyr)

dat2 <- dat %>%
  group_by(Company, Loc) %>%
  mutate(ID = paste0("Spec", 1:n())) %>%
  ungroup() %>%
  spread(ID, Spec) %>%
  select(c("Company", "Loc", "Type", paste0("Spec", 1:(ncol(.) - 3))))
dat2
# # A tibble: 6 x 8
#     Company   Loc  Type Spec1 Spec2 Spec3 Spec4 Spec5
#       <int> <int> <int> <int> <int> <int> <int> <int>
# 1 100000012    42    51   516    NA    NA    NA    NA
# 2 100000012    43    53   530    NA    NA    NA    NA
# 3 100000012   104    51   363   431   508   512   513
# 4 100000012   126    51   513    NA    NA    NA    NA
# 5 100000012   166    53   530    NA    NA    NA    NA
# 6 100123545    50    52   513   363    NA    NA    NA  

ДАННЫЕ

dat <- read.table(text = "Company    Loc         Type     Spec
100000012   104         51      363
                  100000012   104         51      431
                  100000012   104         51      508
                  100000012   104         51      512
                  100000012   104         51      513
                  100000012   126         51      513
                  100000012   166         53      530
                  100000012   42          51      516
                  100000012   43          53      530
                  100123545   50          52      513
                  100123545   50          52      363",
                  header = TRUE)

Спасибо! Я использовал этот вариант, и он выглядит неплохо. Когда я сделал это с большим набором данных, столбцы Spec упорядочены как Spec1, Spec11, Spec 12 и т. д. Вместо Spec1, Spec2 и т. д. Я попытался использовать «01» в mutate, но это не помогло. В любом случае исправить с добавлением к приведенному выше коду?

Joe Hafer 01.05.2018 16:29

@JoeHafer Пожалуйста, посмотрите мое обновление. Последний вызов select предназначен для расстановки столбцов.

www 01.05.2018 17:01

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