rbind 命名向量到不同长度的矩阵

rbind named vector to matrix with different lengths

我正在尝试将一个命名向量绑定到一个矩阵上。命名向量的长度与矩阵不同:

> 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   

如果可以将矩阵转换为dataframe,可以使用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>

下面是基本的 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     

我们可以使用rbindlist

library(data.table)
rbindlist(list(as.data.frame(m), as.data.frame(t(named_vec))), fill = TRUE)