rbind именованного вектора с матрицей разной длины - PullRequest
2 голосов
/ 02 мая 2020

Я пытаюсь связать именованный вектор в матрицу. Названный вектор имеет другую длину в качестве матрицы:

> m <- matrix(data = c("1", "2", "3"), 
            nrow = 1, ncol = 3, 
            dimnames = list(c(), 
                            c("column 1", "column 2", "column 3")))

> named_vec <- c("4", "5")
> names(named_vec) <- c("column 1", "column 2")

> rbind(m, named_vec)

Я получаю следующее:

Warning message:
In rbind(m, named_vec) :
  number of columns of result is not a multiple of vector length (arg 2)

Это имеет нежелательный эффект повторения более короткого вектора.
Также, Функция plyr rbind.fill здесь не работает, так как оба аргумента должны быть фреймами данных:

> plyr::rbind.fill(data.frame(m), data.frame(named_vec))

Error: All inputs to rbind.fill must be data.frames

Мой желаемый вывод - это матрица, которая заполняет пропущенные значения с помощью NA вместо повторения вектора, например:

     column 1 column 2 column 3
[1,] "1"      "2"      "3"     
[2,] "4"      "5"      NA   

Ответы [ 3 ]

3 голосов
/ 02 мая 2020

Ниже приведено базовое решение R

do.call(rbind,lapply(u<-list(m,named_vec),`length<-`,max(lengths(u))))

, такое что

     column 1 column 2 column 3
[1,] "1"      "2"      "3"     
[2,] "4"      "5"      NA     
2 голосов
/ 03 мая 2020

Мы можем использовать rbindlist

library(data.table)
rbindlist(list(as.data.frame(m), as.data.frame(t(named_vec))), fill = TRUE)
2 голосов
/ 02 мая 2020

Если все в порядке, чтобы преобразовать матрицы в фрейм данных, вы можете использовать bind_rows.

dplyr::bind_rows(data.frame(m), data.frame(t(named_vec)))

#  column.1 column.2 column.3
#1        1        2        3
#2        4        5     <NA>
...