Robert Kubrick - 1 year ago 65

R Question

rbind does not check for column names when binding together vectors:

`l = list(row1 = c(10, 20), row2 = c(20, 10))`

names(l$row1) = c("A", "B")

names(l$row2) = c("B", "A")

l

$row1

A B

10 20

$row2

B A

20 10

rbind(l$row1, l$row2)

A B

[1,] 10 20

[2,] 20 10

How can I produce this matrix from a number of list elements, insuring the column names are correctly matched across rows:

`A B`

[1,] 10 20

[2,] 10 20

Answer Source

You can use `match`

:

```
l <- list(row1 = setNames(1:3, c("A", "B", "C")),
row2 = setNames(1:3, c("B", "C", "A")),
row3 = setNames(1:3, c("C", "A", "B")))
do.call(rbind, lapply(l, function(x) x[match(names(l[[1]]), names(x))]))
```

The result:

```
A B C
row1 1 2 3
row2 3 1 2
row3 2 3 1
```