Несколько строк в несколько столбцов Dataframe в R - PullRequest
0 голосов
/ 01 мая 2018

Я относительно новичок в R и пытаюсь транспонировать рамку даты повторяющихся строк в столбцы определенным образом. То, что я хочу, это в соответствии с методикой распространения () в Tidyr, но я считаю, что это немного отличается, потому что я не могу понять, как это правильно. Каждая запись будет уникальной в зависимости от Company, Loc и Type с несколькими строками Spec, расположенными в виде столбцов. Существует различное количество спецификаций для каждой уникальной записи, может быть до 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

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

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

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  

DATA

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)
0 голосов
/ 01 мая 2018

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

library(data.table)
dcast(setDT(df1), Company + Loc + Type ~
         paste0("Spec", rowid(Company, Loc, Type)), value.var = "Spec")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...