Я относительно новичок в 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
Мы можем использовать dcast
library(data.table)
dcast(setDT(df1), Company + Loc + Type ~
paste0("Spec", rowid(Company, Loc, Type)), value.var = "Spec")
Мы также можем использовать dplyr и тидир.
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)
@JoeHafer Пожалуйста, посмотрите мое обновление. Последний вызов select
предназначен для расстановки столбцов.
Спасибо! Я использовал этот вариант, и он выглядит неплохо. Когда я сделал это с большим набором данных, столбцы Spec упорядочены как Spec1, Spec11, Spec 12 и т. д. Вместо Spec1, Spec2 и т. д. Я попытался использовать «01» в mutate, но это не помогло. В любом случае исправить с добавлением к приведенному выше коду?