0

This feels like a simply question that I'm overlooking somehow. So I have many vectors of differing lengths that I'd like to put together into 1 large data frame. I've been playing around with merge() and full_join(), and similar functions but these seem primarily focused on combining only 2 strings of unequal size. I have 30.

#Basically, I have something like this:

a <- c(1:5)
b <- c(1:7)
c <- c(1:20)
d <- c(1:16)
e <- c(1:9)
f <- c(1:42)

#and I would like to make something like this:
a  b  c  d  e  f 

1  1  1  1  1  1 
2  2  2  2  2  2 
3  3  3  3  3  3 
4  4  4  4  4  4 
5  5  5  5  5  5 
NA 6  6  6  6  6
NA 7  7  7  7  7
NA NA 8  8  8  8

ect...
ect...
ect...

Any suggestions?

  • 1
    probably this will help you: https://stackoverflow.com/questions/3699405/how-to-cbind-or-rbind-different-lengths-vectors-without-repeating-the-elements-o – AlexB Jul 16 '20 at 15:21

2 Answers2

0

You can try this:

library(plyr)
#Put in a list
List <- list(a,b,c,d,e,f)
#Format
List <- lapply(List,function(x) as.data.frame(t(x)))
#Join
df1 <- as.data.frame(t(rbind.fill(List)))
names(df1)<-letters[1:6]

    a  b  c  d  e  f
1   1  1  1  1  1  1
2   2  2  2  2  2  2
3   3  3  3  3  3  3
4   4  4  4  4  4  4
5   5  5  5  5  5  5
6  NA  6  6  6  6  6
7  NA  7  7  7  7  7
8  NA NA  8  8  8  8
9  NA NA  9  9  9  9
10 NA NA 10 10 NA 10
11 NA NA 11 11 NA 11
12 NA NA 12 12 NA 12
13 NA NA 13 13 NA 13
14 NA NA 14 14 NA 14
15 NA NA 15 15 NA 15
16 NA NA 16 16 NA 16
17 NA NA 17 NA NA 17
18 NA NA 18 NA NA 18
19 NA NA 19 NA NA 19
20 NA NA 20 NA NA 20
21 NA NA NA NA NA 21
22 NA NA NA NA NA 22
23 NA NA NA NA NA 23
24 NA NA NA NA NA 24
25 NA NA NA NA NA 25
26 NA NA NA NA NA 26
27 NA NA NA NA NA 27
28 NA NA NA NA NA 28
29 NA NA NA NA NA 29
30 NA NA NA NA NA 30
31 NA NA NA NA NA 31
32 NA NA NA NA NA 32
33 NA NA NA NA NA 33
34 NA NA NA NA NA 34
35 NA NA NA NA NA 35
36 NA NA NA NA NA 36
37 NA NA NA NA NA 37
38 NA NA NA NA NA 38
39 NA NA NA NA NA 39
40 NA NA NA NA NA 40
41 NA NA NA NA NA 41
42 NA NA NA NA NA 42
Duck
  • 39,058
  • 13
  • 42
  • 84
0
l <- list(a=a,b=b,c=c,d=d,e=e,f=f)
df <- data.frame(lapply(l, "length<-", max(lengths(l))))

Output

    a  b  c  d  e  f
1   1  1  1  1  1  1
2   2  2  2  2  2  2
3   3  3  3  3  3  3
4   4  4  4  4  4  4
5   5  5  5  5  5  5
6  NA  6  6  6  6  6
7  NA  7  7  7  7  7
8  NA NA  8  8  8  8
9  NA NA  9  9  9  9
10 NA NA 10 10 NA 10
11 NA NA 11 11 NA 11
12 NA NA 12 12 NA 12
13 NA NA 13 13 NA 13
14 NA NA 14 14 NA 14
15 NA NA 15 15 NA 15
16 NA NA 16 16 NA 16
17 NA NA 17 NA NA 17
18 NA NA 18 NA NA 18
19 NA NA 19 NA NA 19
20 NA NA 20 NA NA 20
21 NA NA NA NA NA 21
22 NA NA NA NA NA 22
23 NA NA NA NA NA 23
24 NA NA NA NA NA 24
25 NA NA NA NA NA 25
26 NA NA NA NA NA 26
27 NA NA NA NA NA 27
28 NA NA NA NA NA 28
29 NA NA NA NA NA 29
30 NA NA NA NA NA 30
31 NA NA NA NA NA 31
32 NA NA NA NA NA 32
33 NA NA NA NA NA 33
34 NA NA NA NA NA 34
35 NA NA NA NA NA 35
36 NA NA NA NA NA 36
37 NA NA NA NA NA 37
38 NA NA NA NA NA 38
39 NA NA NA NA NA 39
40 NA NA NA NA NA 40
41 NA NA NA NA NA 41
42 NA NA NA NA NA 42
slava-kohut
  • 4,203
  • 1
  • 7
  • 24