Вот базовое решение R, использующее lapply
+ split
, т. Е.
datout <- data.frame(t(do.call(rbind,
lapply(u<-lapply(split(dat,dat$Company),`[[`,2),
`length<-`,
max(lengths(u))))),
check.names = FALSE)
, такое что
> datout
100000012 100123545 100123600
1 104 50 21
2 105 NA 10
3 107 NA NA
4 102 NA NA
5 166 NA NA
6 126 NA NA
7 169 NA NA
8 42 NA NA
9 43 NA NA
DATA
dat <- structure(list(Company = c(100000012L, 100000012L, 100000012L,
100000012L, 100000012L, 100000012L, 100000012L, 100000012L, 100000012L,
100123545L, 100123600L, 100123600L), Loc = c(104L, 105L, 107L,
102L, 166L, 126L, 169L, 42L, 43L, 50L, 21L, 10L)), class = "data.frame", row.names = c(NA,
-12L))