我是R的新手,我试图以某种方式将重复行的日期框架转换为列。我想要的是沿着tidyr的spread()线,但我相信它略有不同,因为我似乎无法做到正确。每条记录都是基于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
答案 0 :(得分:1)
我们可以使用dcast
library(data.table)
dcast(setDT(df1), Company + Loc + Type ~
paste0("Spec", rowid(Company, Loc, Type)), value.var = "Spec")
答案 1 :(得分:0)
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)